使用SQL Server 2012。
我有一个表T_Orders
,其中包含很少的订单明细列。在表格中还有列ClientID -int
,OrderDateTime - smalldatetime
。
如何返回每个客户的最后一个订单?
问题在于,如果我这样做:
select max(OrderDateTime), ClientID
from t_Orders
group by ClientID
我不会得到有关订单的其他信息,因为我没有选择所有列。如果我选择所有列,我将必须按所有列分组,结果将不是该客户的最后一个订单。
答案 0 :(得分:2)
这通常使用窗口函数来解决:
select *
from (
select o.*,
row_number() over (partition by o.ClientID order by o.OrderDateTime desc) as rn
from t_orders o
) t
where rn = 1
order by ClientId;