我正在尝试从我创建的
OTO_HISTORICAL_TRACKING_DETAIL
CTE 获取过去 3 个月的数据。
OTO_START_DATE
采用 DATE
格式 - 'YYYY-MM-DD'。
此查询返回 0 个结果
SELECT*
FROM OTO_HISTORICAL_TRACKING_DETAIL
WHERE OTO_START_DATE BETWEEN ADD_MONTHS(CURRENT_DATE, -4)
AND ADD_MONTHS(CURRENT_DATE, -1)
但是,当我使用此查询时,我得到结果
SELECT *
FROM OTO_HISTORICAL_TRACKING_DETAIL
WHERE OTO_START_DATE BETWEEN ADD_MONTHS(CURRENT_DATE, -4)
AND CURRENT_DATE
所以让我们获取一些简单的数据来检查逻辑:
with OTO_HISTORICAL_TRACKING_DETAIL(OTO_START_DATE) as (
select * from values
('2023-08-01'::date),
('2023-09-01'::date),
('2023-10-01'::date),
('2023-11-01'::date),
('2023-12-01'::date)
)
SELECT *
FROM OTO_HISTORICAL_TRACKING_DETAIL
WHERE OTO_START_DATE BETWEEN ADD_MONTHS(CURRENT_DATE, -4)
AND ADD_MONTHS(CURRENT_DATE, -1)
给出:
所以让我们通过查看所有值来了解可能发生的情况:
with OTO_HISTORICAL_TRACKING_DETAIL(OTO_START_DATE) as (
select * from values
('2023-06-01'::date),
('2023-07-01'::date),
('2023-08-01'::date),
('2023-09-01'::date),
('2023-10-01'::date),
('2023-11-01'::date),
('2023-12-01'::date)
)
SELECT *
,CURRENT_DATE
,ADD_MONTHS(CURRENT_DATE, -4) as date_start
,ADD_MONTHS(CURRENT_DATE, -1) as date_end
,OTO_START_DATE BETWEEN date_start and date_end as filter_logic
FROM OTO_HISTORICAL_TRACKING_DETAIL
--WHERE OTO_START_DATE BETWEEN ADD_MONTHS(CURRENT_DATE, -4)
-- AND ADD_MONTHS(CURRENT_DATE, -1)
这可能是问题所在,current_date 是确切的“日期”,因此一个月前,可能不是您想要的。也许您想要这些月份的开始/结束,此时您需要使用 DATE_TRUNC('month', current_month) 和 LAST_DATE
喜欢:
with OTO_HISTORICAL_TRACKING_DETAIL(OTO_START_DATE) as (
select * from values
('2023-06-01'::date),
('2023-07-01'::date),
('2023-08-01'::date),
('2023-09-01'::date),
('2023-10-01'::date),
('2023-11-01'::date),
('2023-12-01'::date)
)
SELECT *
,CURRENT_DATE
--,ADD_MONTHS(CURRENT_DATE, -4) as date_start
--,ADD_MONTHS(CURRENT_DATE, -1) as date_end
--,OTO_START_DATE BETWEEN date_start and date_end as filter_logic
,ADD_MONTHS(date_trunc('month', CURRENT_DATE), -3) as month_start
,last_day(CURRENT_DATE, 'month') as month_end
,OTO_START_DATE BETWEEN month_start and month_end as filter_logic_2
FROM OTO_HISTORICAL_TRACKING_DETAIL
给予: