在我的項目中選擇數據時出現性能問題。Tricky SQL SELECT語句
有3列的表:「ID」,「時間」和「組」
- 的ID只是唯一ID如常。
- 時間是條目的創建日期。
- 該組在那裏累積某些條目。
所以表中的數據可能看起來像這樣:
ID | TIME | GROUP
------------------------
1 | 20090805 | A
2 | 20090804 | A
3 | 20090804 | B
4 | 20090805 | B
5 | 20090803 | A
6 | 20090802 | B
...等等。
現在的任務是在給定日期選擇每個組中的「當前」條目(它們的ID)。也就是說,爲每個組查找給定日期的最新條目。
以下先決條件適用於:
- 我不提前知道不同的羣體 - 可能有許多不同的人隨時間變化的
- 選擇日期可能說謊的日期「之間」表中的條目。然後我必須找到每個組中最接近的一個。也就是說,TIME小於選擇日期,但是該規則適用於組中的最大值。
我現在做的是一個多步驟的過程,我想變成一個SELECT語句:
SELECT DISTINCT group FROM table
找到可用組- 對於1找到的每個組)
SELECT * FROM table WHERE time<selectionDate AND group=loop ORDER BY time DESC
- 取每個結果的第一行中找到2)
顯然,這不是最佳的。
所以我會很高興,如果一些更有經驗的SQL專家可以幫助我找到解決方案將這些步驟放在一個單一的聲明。
謝謝!
您正在使用什麼數據庫?更高級的功能差別很大。 – Thilo 2009-08-05 05:36:07
'TIME','TABLE'和'GROUP'是保留的SQL關鍵字,因此,我發現它們有點誤導爲SQL對象的名稱,如表和列。 – pilcrow 2009-08-05 05:44:33
首先,感謝迄今爲止的快速和偉大的答案。 我真的忘了一些細節:我正在使用ORACLE,但最好該解決方案還應該可以與Postgresql一起使用。 是的,名稱確實是誤導性的關鍵字 - 對不起。 – 2009-08-05 05:46:58