首页 > 解决方案 > SQL 中有没有一种方法可以选择表中所有可用天数有 30 天的差异跳跃?

问题描述

我需要选择所有日期,从当前日期开始,过去之间有 30 天的跳跃。例如,今天是 10 月 18 日,所以我需要得到 9 月 18 日、8 月 19 日、7 月 20 日。

我不能简单地写函数 current_date - 30, current_date - 60, current_date - 90 因为数据的开头很远。

标签: sqldatedays

解决方案


如果您使用的是 Postgres,这很容易使用generate_series()

select d::date as "date"
from generate_series(current_date, 
                     current_date - interval '1 year', 
                     interval '-1 month') as t(d)

从今天开始返回“过去 12 个月”。

如果今天是 2019-10-18,则返回:

date      
----------
2019-10-18
2019-09-18
2019-08-18
2019-07-18
2019-06-18
2019-05-18
2019-04-18
2019-03-18
2019-02-18
2019-01-18
2018-12-18
2018-11-18
2018-10-18

如果您想要 30 天的间隔(而不是 1 个月),请使用:

select d::date as date
from generate_series(current_date, 
                     current_date - interval '1 year', 
                     interval '-30 day') as t(d)

推荐阅读