我有以下查询:
SELECT o.ClientId, o.MAX(Date), o.OrderNumber
FROM dbo.tblOrders
GROUP BY o.ClientId, o.OrderNumber
这仍然是我的所有订单号码,我怎样才能获得与MAX日期相符的订单号。
我想要完成的是获取每个客户的MAX订单日期并显示订单号。
由于
答案 0 :(得分: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
如果你正在使用支持窗口函数的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
答案 1 :(得分:0)
查看SQL中的HAVING子句,或者只是添加一个基于order_id的WHERE子句和一个子选择,该子选择使用适当的MAX值获取表中的order_id。
答案 2 :(得分:0)
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