按客户查找最后几个日期

时间:2013-08-02 18:37:58

标签: sql max

我拥有的表是客户,客户,成本,日期 我想找到每个客户的最后4个日期,这样我最终可以在这些日期汇总。并非所有客户都有相同的日期。某些成本为0的客户缺少行(因此日期)。

Customer  ID   Cost   Date

Alfred    1    100    7/1
Alfred    1    100    7/2
Alfred    1    200    7/3
Alfred    1    300    7/5
Alfred    1    200    7/6
Bob       2    500    7/4
Bob       2    500    7/5
Bob       2    500    7/6
Bob       2    500    7/7

等。所以对于阿尔弗雷德,我想拉出日期7 / 2,3,5和&的行。对于鲍勃,我想拉他所有的行。如果客户的日期/行数少于4个,我不想要任何行(尽管这可以单独完成 - 不是大问题)。只拉动每个客户的最后4个日期的行。

谢谢!

1 个答案:

答案 0 :(得分:0)

SQL的大多数方言都支持dense_rank()窗口函数。这正是您需要解决此问题的方法:

select t.Customer, t.ID, t.Cost, t.Date
from (select t.*,
             dense_rank() over (partition by Customer order by "Date" desc) as seqnum
      from t
     ) t
where seqnum <= 4;

Dense_rank()通过包含数据中最近四个日期的所有行来处理重复项。如果您想要最近日期的四行,请改用row_number()