【发布时间】:2020-09-28 11:23:55
【问题描述】:
我有一个有 4 列的表格:
ID, Date, Office, Reports
- “日期”显示报告的创建时间。
- 创建办公室的“办公室”。
- “报告”创建的报告数量。
原始表格
CREATE TABLE REPORTS (
`ID` INTEGER,
`Date` DATE,
`Office` VARCHAR(2),
`Reports` INTEGER
);
INSERT INTO REPORTS
(`ID`, `Date`, `Office`, `Reports`)
VALUES
('1', '2020-09-01', 'AR', '3'),
('2', '2020-09-01', 'ES', '2'),
('3', '2020-09-03', 'ES', '4'),
('4', '2020-09-05', 'AR', '1'),
('5', '2020-09-05', 'OG', '1'),
('6', '2020-09-05', 'ES', '4'),
('7', '2020-09-08', 'ES', '5'),
('8', '2020-09-08', 'AR', '6'),
('9', '2020-09-15', 'OG', '7'),
('10', '2020-09-16', 'ES', '9');
我需要使用 sql 行代码来获取显示所有日期(不显示重复日期)的表格,以及两个新列“Reports_7_days_prev”和“Reports_7_days_after”。结果应该如下表:
date | Reports 7 prev | Reports 7 after
:--------- | -------------: | --------------:
2020-09-01 | 5 | 26
2020-09-03 | 9 | 21
2020-09-05 | 15 | 17
2020-09-08 | 26 | 18
2020-09-15 | 18 | 16
2020-09-16 | 16 | 9
每一列的计算方式如下:
-
“Reports 7 days prev”:它应该汇总每行日期前 7 天创建的所有报告。例如,在输出表中日期为“2020-09-15”的行中,结果 18 是日期间隔内“报告”列中所有值的总和 [2020-09-08 , 2020-09 -15],对应于“ID”为 7、8 和 9 => (5 + 6 + 7 = 18) 的行。
-
“Reports 7 days after”:它应该汇总每行日期后 7 天创建的所有报告。例如,在输出表中日期为“2020-09-05”的行中,结果 17 是日期间隔内“报告”列中所有值的总和 [2020-09-05 , 2020-09 -12],对应“ID”为4、5、6、7和8的行 => (1 + 1 + 4 + 5 + 6 = 17)
我认为我的 SQL 查询应该是这样的:
SELECT Date,
sum([QUERY 1]) as "Reports 7 days prev",
sum ([QUERY 2]) as "Reports 7 days after"
FROM REPORTS
GROUP BY Date
但我不知道我应该在 [QUERY 1] 和 [QUERY 2] 中包含什么以获得前 7 天和后 7 天。
非常感谢,
【问题讨论】:
-
我正在使用 MySQL v5.7,我在此链接 db-fiddle.com 中创建了表