SQL MAX(DATE)订单号

use*_*432 4 sql

我有以下查询:

SELECT o.ClientId, o.MAX(Date), o.OrderNumber
FROM dbo.tblOrders
GROUP BY o.ClientId, o.OrderNumber
Run Code Online (Sandbox Code Playgroud)

这仍然是给我所有的订单号,我怎么才能得到与MAX日期一致的订单号.

我想要完成的是获取每个客户的MAX订单日期并显示该订单号.

谢谢

Joe*_*lli 7

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
Run Code Online (Sandbox Code Playgroud)

如果您使用的是支持窗口函数的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
Run Code Online (Sandbox Code Playgroud)