【问题标题】:calculate dfference per date with (my)sql用(mysql)计算每个日期的差异
【发布时间】:2018-02-19 18:22:37
【问题描述】:

我有一个(mysql)表,如下所示:

|date      |status
|2017-07-10|done
|2017-07-10|new 
|2017-07-11|done
|2017-07-11|done 
|2017-07-12|done
|2017-07-12|done 
|2017-07-12|new 

现在我想要每个日期的状态完成(或所有状态)的计数差异所以在 2017 年 7 月 11 日我得到一个,因为状态完成比前一天多一个,依此类推.

|date      |cnt
|2017-07-11|1
|2017-07-12|0

我已经有一个 SQL,它给我一个输入日期的结果:

SELECT '2017-07-11' as d2,
       (SELECT count(*) as cnt 
          FROM table 
         WHERE status = 'done' 
           AND date > DATE_ADD(d2, INTERVAL 1 DAY) 
           AND date < DATE_ADD(d2, INTERVAL 2 DAY)) - 
       (SELECT count(*) as cnt 
          FROM table 
         WHERE status = 'done' 
           AND date > d2 
           AND date < DATE_ADD(d2, INTERVAL 1 DAY)) as cnt;

但这仅适用于 d2 的静态日期,而不是子查询。任何人都可以帮忙吗?如果可能的话,我也会为 postgres 提供解决方案。

【问题讨论】:

    标签: mysql sql aggregation


    【解决方案1】:
    SELECT cur.dt,
           nxt.cnt - cur.cnt
      FROM (SELECT dt,
                   COUNT(stat) cnt
              FROM tab
             WHERE stat = 'done'
             GROUP BY dt
           ) nxt
      JOIN 
           (SELECT (dt + 1) dt,
                   COUNT(stat) cnt
              FROM tab
             WHERE stat = 'done'
             GROUP BY dt
           ) cur
        ON nxt.dt = cur.dt
    

    结果

    dt        nxt.cnt - cur.cnt
    20170711  1
    20170712  0
    

    【讨论】:

    • 感谢您的解决方案。作品。也感谢格式修复 ;-) stackoverflow 中的表格很痛苦。
    • 来帮忙。 :)
    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-03
    • 2012-06-10
    相关资源
    最近更新 更多