SQL — 获取 A 列的日期与 B 列的日期相隔 7 天的倍数的所有行

  • 本文关键字:日期 获取 SQL mysql sql date presto
  • 更新时间 :
  • 英文 :

CREATE TABLE table_1 (
`userid` VARCHAR(2),
`date_accessed` DATE,
`rank` INT,
`country` VARCHAR(2)
);
INSERT INTO table_1
(`userid`, `date_accessed`, `rank`, `country`)
VALUES
('A.', '2019-01-01', 1, 'US'),
('B.', '2019-01-02', 1, 'FR'),
('A.', '2019-01-03', 2, 'US'),
('A.', '2019-01-04', 3, 'US'),
('B.', '2019-01-04', 2, 'FR'); 

这是小提琴:https://www.db-fiddle.com/f/9F7XPiGtuQAYXQ99HfNJGN/0

下面是一个数据库示例。我想要记录日期与开始日期相隔 7 天倍的所有行。开始日期和记录日期不是唯一的;它对于每个国家/地区都是唯一的,但例如,美国和法国的开始日期都可以为 1 月 1 日,记录日期为 1 月 8 日。例如,在下表中,我想提取开始日期为 2019-01-01 且记录日期为 2019-01-08 的行。


| start_date | num_people | record_date | rating | country |
| ---------- | ---------- | ----------- | ------ | ------- |
| 2019-01-01 | 275        | 2019-01-08  | 4      | FR      |
| 2019-01-02 | 150        | 2019-01-10  | 4      | FR      |
| 2019-01-03 | 175        | 2019-01-09  | 5      | FR      |
| 2019-01-04 | 300        | 2019-01-11  | 2      | FR      |
| 2019-01-01 | 100        | 2019-01-08  | 8.5    | US      |
| 2019-01-03 | 50         | 2019-01-10  | 5.5    | US      |
| 2019-01-03 | 50         | 2019-01-17  | 5      | US      |
---

我想这样做到 84 天(每 7 天/每周 12 周)。

你只需要差分和一个模函数。

在 MySQL 中:

select t.*
from t
where mod(datediff(record_date, start_date), 7) = 0;

在PrestoDB中,这将是:

where mod(date_diff('day', start_date, record_date), 7) = 0

相关内容

  • 没有找到相关文章

最新更新