每周计算mysql的方差

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

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

  1. Date Users Week Over Week Users
  2. 06-01-2019 10 10
  3. 06-08-2019 15 15
  4. 06-15-2019 5 5

目前, Week Over Week Users 只反映了我在 Users 列。所需输出为:

  1. Date Users Week Over Week Users
  2. 06-01-2019 10 10
  3. 06-08-2019 15 5
  4. 06-15-2019 5 -10

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

  1. (
  2. SUM(
  3. CASE
  4. WHEN WEEK(`Date`) = WEEK(CURRENT_DATE()) THEN `Users`
  5. ELSE 0
  6. END
  7. ) - SUM(
  8. CASE
  9. WHEN WEEK(`Date`) = WEEK(CURRENT_DATE()) - 1 THEN `Users`
  10. ELSE 0
  11. END
  12. )
  13. )

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

qvtsj1bj

qvtsj1bj1#

你想要什么 lag() :

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

6qftjkof2#

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

  1. select
  2. t.date,
  3. t.users,
  4. t.users - coalesce(
  5. (
  6. select t1.users
  7. from mytable t1
  8. where t1.date < t.date
  9. order by t1.date desc
  10. limit 1
  11. ),
  12. 0
  13. ) week_over_week_users
  14. from mytable t

相关问题