mysql - 获取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-13和2018-09-13之间的数据,我必须得到2018-08-31和2018-08-13之间的差异,并将其添加到2018-09-13的值中。
另外,如果可能,我想在单个查询中在相同日期之间一次对所有page_id执行此操作。
解决方案
假设每个页面的计数器都是唯一的,并且 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'
推荐阅读
- vb.net - 团结我需要从无限循环运行更新
- android - ellipsize 在 ConstraintLayout 中不起作用
- reactjs - 反应本机 npm 开始无法正常工作
- python - 如何避免在 Django 中基于函数的视图中重复代码?
- c# - C# 编译器:来自 lambda 的类
- node.js - BashScript 停止/永远不会在没有任何错误消息的情况下完成
- android - 如何禁用 ViewPager 滑动并使用按钮单击启用手动滑动
- junit - Junit 测试用例未针对模拟 JPA 运行
- scala - 尝试放置数据时,Aplakka scala s3 连接器挂起
- mongodb - Mongo查询在地图内搜索字符串