Select 日期有差距

Select with gap in dates

可以在记录之间使用预定义的天数间隔制作 select离子,例如:

+------+----------------+--------+
| user | date           |  Data  |
+----- +----------------+--------+
|    1 | 2022-01-01     |   1    |
|    1 | 2022-01-02     |   5    |
|    1 | 2022-01-03     |   2    |
|    1 | 2022-01-06     |   3    |
|    1 | 2022-01-07     |   7    |
|    1 | 2022-01-08     |   1    |
|    1 | 2022-01-09     |   2    |
+------+----------------+--------+

GIVE ME ALL RECORDS WITH 2 DAYS INTERVAL FOR EACH DATE

(在银行的记录中可能存在空白,如 2022-01-032022-01-06 之间发生的那样)

结果:

+------+----------------+--------+
| user | date           |  Data  |
+----- +----------------+--------+
|    1 | 2022-01-01     |   1    |
|    1 | 2022-01-06     |   3    |
|    1 | 2022-01-09     |   2    |
+------+----------------+--------+

但是这个值2天可以改成7天、30等

目前我通过代码手动执行此操作,我获得开始日期,添加 + x 天,执行 select,添加 + x 天,执行其他 select 直到间隔结束,但这非常昂贵,而且这个过程需要几分钟。

有没有办法在单个查询中执行此操作?

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY `date`) rn
    FROM tablename
)
SELECT * 
FROM cte
WHERE rn MOD 3 = 1