问题描述
在我的 MysqL 数据库中,我有以下名为 MYDATA 的视图(最初组合了 2 个数据表)。
表格我的数据
用户 | 我的日期 | 项目 |
---|---|---|
17 | 2020-01-01 | 1.0 |
22 | 2020-01-01 | 6.0 |
17 | 2020-01-02 | 3.2 |
17 | 2020-01-04 | 4.0 |
17 | 2020-01-08 | 1.0 |
17 | 2020-01-09 | 6.2 |
22 | 2020-01-09 | 4.0 |
17 | 2020-01-10 | 5.3 |
如您所见,并非所有日期(myDate 列)都包含项目。对于选定的用户(即用户 17),我需要计算过去 14 天(包括“这一天”)的所有日期(即包括 2020-01-03 不包括在MYDATA 表)。所以基本上我想获得以下内容:
用户 | 我的日期 | 结果 |
---|---|---|
17 | 2020-01-01 | (过去 14 天的平均值) |
17 | 2020-01-02 | (过去 14 天的平均值) |
17 | 2020-01-03 | (过去 14 天的平均值) |
... | ... | ... |
17 | 2020-12-30 | (过去 14 天的平均值) |
17 | 2020-12-31 | (过去 14 天的平均值) |
在 sqlfiddle 中随意使用它:http://sqlfiddle.com/#!9/02cc94/1
如果需要,我还有一个包含所有年份日期的“日历”表。
表格日历
我的日期 |
---|
2020-01-01 |
2020-01-02 |
2020-01-03 |
2020-01-04 |
2020-01-05 |
2020-01-06 |
请问我该如何继续?谢谢你的帮助。我已经被这个问题困扰了好几个月了。
解决方法
寻找
SELECT user,t1.myDate,SUM(t2.items) / 14 avg_items
FROM calendar t1
JOIN test t2 ON t2.myDate BETWEEN t1.myDate - INTERVAL 13 DAY and t1.myDate
GROUP BY t2.user,t1.myDate
ORDER BY 1,2
fiddle - MySQL8 特定的构造 (CTE) 仅用于 calendar
表生成。