用(mysql)计算每个日期的差异

Posted

技术标签:

【中文标题】用(mysql)计算每个日期的差异【英文标题】:calculate dfference per date with (my)sql 【发布时间】: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 提供解决方案。

【问题讨论】:

【参考方案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

【讨论】:

感谢您的解决方案。作品。也感谢格式修复 ;-) *** 中的表格很痛苦。 来帮忙。 :)

以上是关于用(mysql)计算每个日期的差异的主要内容,如果未能解决你的问题,请参考以下文章

计算MySQL和PHP中的日期差异

mysql如何计算每个月第一天到当前日期的天数?

在mysql查询中使用php time()函数计算两个日期之间的差异

MySQL中日期之间的月份差异

如何计算两个日期之间的差异

计算两个日期之间的差异并获得年值? [复制]