用(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)计算每个日期的差异的主要内容,如果未能解决你的问题,请参考以下文章