【问题标题】:SQL getting the first related entry based on date [duplicate]SQL根据日期获取第一个相关条目[重复]
【发布时间】:2022-06-11 23:05:54
【问题描述】:

所以我有一个这样的用户表

UserId    Name
1         John
2         Jack
3         Adam

还有这样的销售表

SalesId  UserId   SalesAmount  status    SalesDate
1        1         10          paid      2020-03-03 14:26:50
2        1         20          paid      2020-03-25 10:08:42
3        2         20          paid      2020-03-09 03:42:56
4        1         10          fail      2020-05-21 07:36:49
5        2         90          fail      2020-07-17 04:08:10
6        3         199         pending   2020-07-19 09:15:05
7        3         100         paid      2020-07-25 01:33:02
8        2         20          paid      2020-08-18 08:24:46

我想做的是根据日期获取每个用户的第一次付费销售,所以预期的结果是:

UserId Name   SalesId
1      John   1 
2      Jack   2
3      Adam   7

这可以在一个查询中完成吗?

【问题讨论】:

    标签: mysql sql database backend relational-database


    【解决方案1】:

    您可以通过按销售日期为每个用户订购每个付费销售的排名来做到这一点。

    WITH cte AS(
    Select
    ROW_NUMBER() OVER(PARTITION BY u.UserId ORDER BY s.SalesDate) as rn
    ,u.UserId 
    ,u.Name   
    ,s.SalesId
    FROM Users u
    LEFT JOIN Sales s
    on u.UserId =s.UserId 
    AND s.status='paid'
    )
    
    Select 
    UserId
    ,Name
    ,SalesId
    FROM cte
    WHERE rn=1
    

    【讨论】:

      【解决方案2】:

      选择 user.userid,sales.userid,user.name 从销售 在 sales.userid=user.userid 上加入用户 其中sales.userid=1 按销售日期升序排列 联盟 选择 user.userid,sales.userid,user.name 从销售 在 sales.userid=user.userid 上加入用户 其中sales.userid=2 按销售日期升序排列 联合

      选择 user.userid,sales.userid,user.name 从销售 在 sales.userid=user.userid 上加入用户 其中sales.userid=2 按 salesdate asc 排序

      ;

      【讨论】:

      • distinct 不是函数。你试过这个代码吗?
      • 是的,代码很好
      猜你喜欢
      • 1970-01-01
      • 2021-05-16
      • 2020-10-16
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      相关资源
      最近更新 更多