首页 > 解决方案 > 每周计算与mysql的方差

问题描述

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

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
    )
)  

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

标签: mysqlsqldatewindow-functionsdomo

解决方案


如果您正在运行 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

推荐阅读