我需要在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
)
)
但是它无法复制“用户”列。
您要lag()
:
select t.*,
(users - lag(users, 1, 0) over (order by date)) as week_over_week
from t;
如果运行的是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