0
查询希望有些人能帮助我解决这个: 我的表是:如何优化使用多个子select语句
id Version datetime name resource
---|--------|------------|--------|---------
1 | 1 | 03/03/2009 | con1 | 399
2 | 2 | 03/03/2009 | con1 | 244
3 | 3 | 01/03/2009 | con1 | 555
4 | 1 | 03/03/2009 | con2 | 200
5 | 2 | 03/03/2009 | con2 | 500
6 | 3 | 04/03/2009 | con2 | 600
7 | 4 | 31/03/2009 | con2 | 700
我需要选择具有最大的价值每一个不同的“名字” “日期时间”小于或等于给定日期;如果有多个满足第一个条件的记录,则版本是最大版本。
如果给定的日期是结果'04/03/2009' 年将是:
id Version datetime name resource
---|--------|------------|--------|---------
2 | 2 | 03/03/2009 | con1 | 244
6 | 3 | 04/03/2009 | con2 | 600
目前我已经创建了下面的查询,其工作原理,但我怀疑这是不是最好的,当谈到以在大桌面上运行时的性能:
SELECT [id], [Version], [datetime], [name], [resource]
FROM theTable
WHERE [Version] =
(
SELECT MAX(Version) FROM theTable AS theTable2 WHERE theTable.[name] = theTable2.[name]
AND theTable2.[datetime] =
(
SELECT MAX(theTable3.[datetime]) FROM theTable AS theTable3
WHERE theTable2.[name] = theTable3.[name] AND theTable3.[datetime] <= '04/03/2009'
)
)
如果某人能够提出更有效的方法来做到这一点,如果可能的话,提供一个例子:-)。
在此先感谢。
Thanks @ Brisbe42,这绝对是更高性能,更具可读性。我将来会更多地使用这个语法。注意,在编译之前需要一个别名,即“select ... from(...)** AS T ** where groupIndex = 1” – 2012-03-18 19:28:38