mysql - 每周计算与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
)
)
但它不起作用,因为它复制了“用户”列。
解决方案
如果您正在运行 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
推荐阅读
- mysql - HikariCP 多个池中的连接数
- javascript - 遍历 HTML 元素的属性,并能够判断哪些是在 HTML 中显式设置的
- windows - 如何配置用户的 git hook 文件夹以匹配项目的
- swift - 运行和开发相同的 Swift macOS 应用程序
- python - Django - 在另一个应用程序中访问应用程序设置
- scala - 通过 spark sql 和 scala 删除文件中的逻辑和直接重复
- wordpress - Wordpress,根据登录凭据重定向到不同的页面
- security - iOS NSLog 语句是否代表安全/隐私问题,还是在 2018 年被系统忽略?
- python - 在 BS4 中刮掉 Lichess 的动作
- python - 运行命令,返回后,python