每周计算mysql的方差

kx5bkwkv  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(451)

我需要显示每周与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
    )
)

但是它不工作,因为它复制了users列。

qvtsj1bj

qvtsj1bj1#

你想要什么 lag() :

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

6qftjkof2#

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

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

相关问题