SQL 最大(日期) 订单号



我有以下查询:

SELECT o.ClientId, o.MAX(Date), o.OrderNumber
FROM dbo.tblOrders
GROUP BY o.ClientId, o.OrderNumber

这仍然给了我所有的订单号,我怎么只能得到与MAX日期相关的订单号。

我试图完成的是获取每个客户端的最大订单日期并显示该订单号。

谢谢

SELECT t.ClientId, t.MaxDate, o.OrderNumber
    FROM (SELECT ClientId, MAX(Date) as MaxDate
              FROM dbo.tblOrders
              GROUP BY ClientId) t
        INNER JOIN dbo.tblOrders o
            ON t.ClientId = o.ClientId
                AND t.MaxDate = o.Date

如果您使用的是支持窗口函数的 RDBMS,如 SQL Server 2005+,也可以像这样完成此操作:

SELECT t.ClientId, t.OrderNumber, t.Date
    FROM (SELECT ClientId, OrderNumber, Date, 
                 ROW_NUMBER() OVER(PARTITION BY ClientId ORDER BY Date DESC) as RowNum
              FROM dbo.tblOrders
         ) t
    WHERE t.RowNum = 1

查看 SQL 中的 HAVING 子句,或者只是添加一个基于 order_id 的 WHERE 子句,其中包含一个子选择,该子选择在具有适当 MAX 值的表中获取order_id。

SELECT 
  o.ClientID, 
  o.Date,
  o.OrderNumber
FROM dbo.tblOrders o
INNER JOIN (SELECT 
              o1.ClientId, 
              MAX(o1.Date) as MaxDate, 
              o1.OrderNumber
            FROM dbo.tblOrders o1
            GROUP BY o.ClientId) o2 ON o.ClientID = o2.ClientID AND o.Date = o2.MaxDate

最新更新