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