2009-11-23 96 views
12

我想從我的表中選擇所有不同的order_id,並按日期列排序該列表。使用DISTINCT是當然的查詢範圍的參數,所以嘗試這樣的事情不工作:SQL選擇不同的值,但按不同的值排序

SELECT DISTINCT(orderId, datetime) 
FROM table 
ORDER BY datetime DESC 

這將返回OrderID和日期時間的所有不同的組合,所以我留下了多個orderIds,我不想要。因此我認爲DISTINCT子句不是要走的路。有沒有人對我如何解決這個問題有任何建議?

謝謝!

回答

21

如果訂單有多行,您想要顯示哪個日期?也許:

SELECT [orderId], MAX([datetime]) 
FROM [table] 
GROUP BY [orderId] 
ORDER BY MAX([datetime]) DESC 
+0

作爲後續,如果我想選擇表中的所有值,而不僅僅是orderId和datetime,該怎麼辦?我有一個感覺,這是一個完全獨立的問題,但... – Erebus 2009-11-23 20:03:31

+0

你需要或者聚合所有的列,或者選擇一個特定的行(min(id),max(id)或類似的),並做一個加入/子-query。 – 2009-11-23 20:33:37

5

如果您的表中有多個orderID(並且它們每個都有不同的日期時間值),您要選擇哪一個?最新的日期,最古老的日期還是別的?

4

也許CTE將有助於:

WITH CTE 
AS 
(

SELECT orderId FROM table ORDER BY datetime DESC 

) 

SELECT DISTINCT orderId FROM CTE 
+0

雖然它是特定於SQL Server,但可能並不有用... – gbn 2009-11-23 19:57:46

+0

感謝您的糾正,暫時我忘了這不是MSDN SQL論壇:) – unclepaul84 2009-11-23 20:16:13

+0

說:「ORDER BY子句在視圖中無效,內聯函數,派生表,子查詢和公用表表達式,除非還指定了TOP,OFFSET或FOR XML。「。 – Atomosk 2015-07-11 13:53:47

0
SELECT DISTINCT * FROM 
    (SELECT value1 
    FROM table1 
    ORDER BY value2); 

爲我工作。

+0

你可以在惠普展開這是一個很好的解決方案。 – 2014-06-27 11:55:12