首页 > 解决方案 > 获取MySQL中两个日期之间的值差

问题描述

我有以下表结构:

page_id   view_count    date
1         30            2018-08-30
1         33            2018-08-31
1         1             2018-09-01
1         5             2018-09-02
...

观看次数在每个月的 1 日重置,并且它的当前值每天存储,因此在 8 月 31 日它增加了 3(因为 33-30)。

我需要做的是通过 SQL 查询检索两个日期之间的查看次数(差异)。要在同一个月内的两个日期之间检索查看计数很简单,只需用较小的日期减去较大的日期,但是在不同月份的两个日期之间检索是我不确定如何实现的。如果我想检索2018-08-132018-09-13之间的数据,我必须得到2018-08-312018-08-13之间的差异,并将其添加到2018-09-13的值中。

另外,如果可能,我想在单个查询中在相同日期之间一次对所有page_id执行此操作。

标签: mysqlsqldate

解决方案


假设每个页面的计数器都是唯一的,并且 page_id 计数器每天都插入到表中,我认为这样的解决方案会起作用

日期以示例为准,应替换为相关参数

SELECT
    v1.view_count + eom.view_count - v2.view_count
FROM
    view_counts v1
    INNER JOIN view_counts v2 ON v2.page_id = v1.page_id AND v2.`date` = '2018-08-13'
    INNER JOIN view_counts eom ON v2.page_id = v.page_id AND eom.`date` = LAST_DAY(DATE_ADD(v.`date`, INTERVAL -1 MONTH))
WHERE
    `date` = '2018-09-13'

推荐阅读