【问题标题】:calculating variance with mysql week over week每周计算与mysql的方差
【发布时间】:2020-09-29 04:00:12
【问题描述】:

我需要在Week Over Week Users 列中显示与 mysql 的每周差异。我的数据如下所示:

Date          Users          Week Over Week Users 
06-01-2019    10              10
06-08-2019    15              15
06-15-2019    5               5

目前,Week Over Week Users 仅反映我在Users 列中的数据。期望的输出是:

Date          Users          Week Over Week Users 
06-01-2019    10              10
06-08-2019    15              5
06-15-2019    5               -10

基本上如果在第二周用户数量增加到 15 个用户,那么我需要显示 5 个(就像上周以来 +5 个用户一样,所以new week Users - last week Users 将是公式)

这是我的代码:

(
    SUM(
        CASE
            WHEN WEEK(`Date`) = WEEK(CURRENT_DATE()) THEN `Users`
            ELSE 0
        END
    ) - SUM(
        CASE
            WHEN WEEK(`Date`) = WEEK(CURRENT_DATE()) - 1 THEN `Users`
            ELSE 0
        END
    )
)  

但它不起作用,因为它复制了“用户”列。

【问题讨论】:

标签: mysql sql date window-functions domo


【解决方案1】:

如果您运行的是 MySQL 5.x,其中 lag() 等窗口函数不可用,您可以使用相关子查询来获取“先前”值:

select
    t.date,
    t.users,
    t.users - coalesce(
        (
            select t1.users 
            from mytable t1 
            where t1.date < t.date 
            order by t1.date desc
            limit 1
        ),
        0
    ) week_over_week_users
from mytable t

【讨论】:

    【解决方案2】:

    你想要lag():

    select t.*,
           (users - lag(users, 1, 0) over (order by date)) as week_over_week
    from t;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 2015-05-13
      • 2018-02-19
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多