我有以下查询:
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