2009-11-23 60 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