SQL中有没有一种方法可以选择一个表中所有可用的天数,并且有30天的差异跳转?

SQL中有没有一种方法可以选择一个表中所有可用的天数,并且有30天的差异跳转?,sql,date,days,Sql,Date,Days,我需要选择所有日期,从当前日期开始,在过去彼此之间有30天的跳跃。 例如,今天是10月18日,所以我需要得到9月18日,8月19日,7月20日 我不能简单地编写函数current_date-30、current_date-60、current_date-90,因为数据的开头很长。如果您使用的是Oracle,您可以使用以下代码- WITH DATES(CUR_DATE, MON) AS (SELECT CURRENT_DATE CUR_DATE, 1 MON FROM DUAL

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


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

如果您使用的是Oracle,您可以使用以下代码-

WITH DATES(CUR_DATE, MON) AS (SELECT CURRENT_DATE CUR_DATE, 1 MON FROM DUAL
                                UNION ALL
                                SELECT D.CUR_DATE - 30, D.MON + 1 
                                FROM DATES D
                                WHERE TO_CHAR(D.CUR_DATE, 'MM') > 1
                                AND TO_CHAR(D.CUR_DATE, 'YY') = TO_CHAR(SYSDATE, 'YY'))
SELECT * FROM DATES

这是小提琴。对于其他数据库,请发布您的DBMS产品。

对于SQL Server,您可以使用以下代码:

;WITH cte_Date30Days(n, d, dte) 
AS (
    SELECT 0, 0, current_timestamp as dte
    UNION ALL
    SELECT n+1, d - 30, dateadd(day, -30, dte)
    FROM    
        cte_Date30Days
    WHERE n < 7-1
)
SELECT  dte FROM cte_Date30Days;

只返回7行,但更改该值以满足您的需要。

如果您使用Postgres,则使用generate\u series非常容易

这将返回从今天开始的过去12个月

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

日期 ----- 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)

你用的是什么产品?SQL只是一种查询语言,而不是特定数据库产品的名称,并且日期/时间函数非常特定于供应商。请为使用postgresql、oracle、sql server、db2的数据库产品添加一个示例……您的问题相当模糊。我不知道日期的开始是什么?我不知道你想达到什么目的?请详细说明并作出适当解释。您可以使用一个示例和示例数据来更好地解释。此外,请指定您正在使用的DBMS
select d::date as date
from generate_series(current_date, 
                     current_date - interval '1 year', 
                     interval '-30 day') as t(d)