【问题标题】:SQL: last 7 Days Calculations based on dateSQL:基于日期的最近 7 天计算
【发布时间】:2020-04-10 09:14:27
【问题描述】:

下表包含特定日期的用户数。希望填充 Total_Users 注册列

逻辑:包含用户计数 b/w Signupdate-14 和 Signupdate-7

例如:15/01/2020 ,包含 2020 年 1 月 1 日到 2020 年 1 月 7 日之间的用户数

Signupdate|  |Users| Total_Users(b/w D-14 & D-7)
1/1/2020  |  |20.  | 60 
2/1/2020  |  |30.  | 80 
3/1/2020  |  |10.  | 90
---       |  |--   | --
---       |  |--   | --
15/1/2020 |  |30.  | 120
16/1/2020 |  |10.  | 40

【问题讨论】:

    标签: sql amazon-redshift


    【解决方案1】:
    
    
    SELECT Signupdate
               , Users
               ,SUM(CASE 
                    WHEN Signupdate BETWEEN to_date(Signupdate,'DDMMYYYY')-14 and to_date(Signupdate,'DDMMYYYY')-7
                    THEN Users END) AS 'Total_Users'
    FROM
    
    
    

    这是假设用户列是数字类型

    【讨论】:

      【解决方案2】:

      假设每个日期都有一行,您将使用带有窗口子句的窗口函数。我不确定 Redshift 是否支持带间隔的窗口框架,但这是基本逻辑:

      select t.*,
             sum(users) over (order by signupdate
                              range between interval '-14' day and interval '-7 day'
                             ) as total_users
      from t;
      

      如果没有,您可以将日期转换为数字并使用它:

      select t.*,
             sum(users) over (order by signupdate
                              rows between 14 preceding and 7 preceding
                             ) as total_users
      from (select t.*,
                   datediff(day, signupdate, date '2000-01-01') as diff
            from t
           ) t
      

      我猜你想要一个完整的一周。但是,这是 8 天。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-25
        • 1970-01-01
        • 1970-01-01
        • 2017-03-03
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多