首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >找到客户的最后几次约会

找到客户的最后几次约会
EN

Stack Overflow用户
提问于 2013-08-02 18:37:57
回答 1查看 33关注 0票数 0

我拥有的表是customer,customerid,cost,date,我想为每个客户找到最后4个日期,这样我最终可以在这些日期上进行聚合。不是所有的顾客都有相同的日期。对于一些成本为0的客户,缺少行(因此也包括日期)。

代码语言:javascript
运行
复制
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和6的行。对于Bob,我想拉出他的所有行。如果客户的日期/行少于4行,我不希望它们中的任何一行(尽管这可以单独完成--这不是大问题)。只提取每个客户的最后4个日期的行。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-02 18:40:00

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

代码语言:javascript
运行
复制
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()代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18023906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档