我有一個系統,用戶可以完成兩種類型的測試。我需要獲取按其最新測試完成日期排序的DISTINCT
個用戶列表。用於從兩個表中選擇ID列和最新日期的SQL語法
爲此,該表也可以被列明爲:
Test_Users
- Test_User_Id (int)
Test_1_Results
- Test_1_Result_Id (int)
- Test_User_Id (int)
- Date_Of_Completion (datetime)
Test_2_Results
- Test_2_Result_Id (int)
- Test_User_Id (int)
- Date_Of_Completion (datetime)
我可以使用UNION
如下高高興興地得到所有不同Test_User_Id
的列表:
SELECT Test_User_Id FROM Test_1_Results
UNION
SELECT Test_User_Id FROM Test_2_Results
我可以很容易地使用ORDER BY Date_Of_Completion DESC
對這些表格之一的結果進行排序,但我不知道如何使用UNION
來做到這一點,或者如果這是繼續進行的最佳方式。
最終我想能夠給別人包內此查詢,如:
SELECT *
FROM Test_Users
WHERE Test_User_Id IN (
//The query i am asking about
)
WHERE some_criteria
但到目前爲止,我還沒有得到任何運氣,而使用UNION
這樣做的,我不知道我是什麼做錯了。
我試圖做到這一點的原因是,管理員用戶需要能夠查看已完成測試的每個人的列表,並使用頂部的最近完成項。
我對SQL非常熟悉,但是我從來沒有真的必須在之前使用UNION
運算符。
+1,但我會將UNION更改爲UNION ALL,因爲我認爲它會表現更好。 – dbenham
@dbenham -tx ...在給定條件下非常有意義....更新了查詢 –
謝謝,很快就會嘗試,看起來很有希望。 @dbenham我認爲'UNION ALL'的性能優勢是因爲不必查找和刪除重複項?無論如何,「GROUP BY」正在完成哪項工作,這樣可以節省兩次嗎? – Ben