我需要从当前日期中选择所有日期,过去的日期之间要相隔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
Here是小提琴。对于其他DB,请发布您的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行,但更改该值以适合您的需求。