SQL选择不同的值,但按不同的值排序

SQL选择不同的值,但按不同的值排序,sql,distinct,Sql,Distinct,我想从我的表中选择所有不同的order_ID,并按date列对该列表进行排序。使用DISTINCT当然是一个查询范围的参数,因此尝试这样的方法是行不通的: SELECT DISTINCT(orderId, datetime) FROM table ORDER BY datetime DESC 这将返回orderId和datetime的所有不同组合,所以剩下的是多个orderId,这是我不想要的。因此,我认为DISTINCE子句不是解决问题的方法。有人对我如何解决这个问题有什么建议吗 谢谢

我想从我的表中选择所有不同的order_ID,并按date列对该列表进行排序。使用DISTINCT当然是一个查询范围的参数,因此尝试这样的方法是行不通的:

SELECT DISTINCT(orderId, datetime) 
FROM table 
ORDER BY datetime DESC
这将返回orderId和datetime的所有不同组合,所以剩下的是多个orderId,这是我不想要的。因此,我认为DISTINCE子句不是解决问题的方法。有人对我如何解决这个问题有什么建议吗


谢谢

如果订单有多行,您希望显示哪个日期?也许:

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

或许CTE有助于:

WITH CTE
AS
(

SELECT orderId FROM table ORDER BY datetime DESC

)

SELECT DISTINCT orderId  FROM CTE

这对我很有用。

作为后续,如果我想选择表中的所有值,而不仅仅是orderId和datetime,该怎么办?我觉得这是一个完全独立的问题,但是……您需要聚合所有列,或者选择一个特定行(min(id)、max(id)或类似行)并执行联接/子查询。感谢您的更正,有一刻我忘记了这不是MSDN SQL论坛:)说ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP、OFFSET或FOR XML。“。SQL Server是否保证维护CTE的顺序?似乎是一个非常危险的内部依赖的东西,如果它甚至工作。特别是因为有形式上正确的解决方案,可以保证预期的结果。这是不正确的。数据库可以自由忽略派生表的ORDER BY子句,当使用散列实现DISTINCT时(例如在更复杂的查询中),它将有效地忽略该子句。您的具体数据库优化程序实现可能意外地产生了所需的结果,但您不能依赖它!
SELECT DISTINCT * FROM 
  (SELECT value1 
   FROM table1 
   ORDER BY value2);