Sql返回每个客户的最后订单详细信息

时间:2016-02-28 08:21:18

标签: sql sql-server greatest-n-per-group

使用SQL Server 2012。

我有一个表T_Orders,其中包含很少的订单明细列。在表格中还有列ClientID -intOrderDateTime - smalldatetime

如何返回每个客户的最后一个订单?

问题在于,如果我这样做:

select max(OrderDateTime), ClientID 
from t_Orders 
group by ClientID

我不会得到有关订单的其他信息,因为我没有选择所有列。如果我选择所有列,我将必须按所有列分组,结果将不是该客户的最后一个订单。

1 个答案:

答案 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;