当我使用 BETWEEN DATEADD(MONTH,-4,CURRENT_DATE) 和 DATEADD(MONTH,-1,CURRENT_DATE) 时获得 0 个结果

Getting 0 results when I use BETWEEN DATEADD(MONTH,-4,CURRENT_DATE) AND DATEADD(MONTH,-1,CURRENT_DATE)

提问人:Kartik 提问时间:11/11/2023 最后编辑:marc_sKartik 更新时间:11/15/2023 访问量:67

问:

我正在尝试从我创建的 CTE 中获取过去 3 个月的数据。OTO_HISTORICAL_TRACKING_DETAIL

OTO_START_DATE格式为“YYYY-MM-DD”。DATE

此查询返回 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
sql 日期 snowflake-cloud-data-platform 日期格式

评论

2赞 Tim Biegeleisen 11/11/2023
检查您的数据并确保有匹配的日期。
5赞 NickW 11/11/2023
大概是因为你有上个月的数据,而不是在那之前?是什么阻止了您查看数据并回答自己的问题,即按日期和/或按月计算记录?
0赞 marc_s 11/12/2023
如果你运行 - 你的表中是否真的该时间段的任何数据?SELECT COUNT(*) FROM OTO_HISTORICAL_TRACKING_DETAIL WHERE OTO_START_DATE BETWEEN ADD_MONTHS(CURRENT_DATE, -4) AND ADD_MONTHS(CURRENT_DATE, -1)

答:

1赞 Simeon Pilgrim 11/12/2023 #1

因此,让我们获取一些 trival 数据来检查逻辑:

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)

给:

enter image description here

让我们通过查看所有值来锻炼可能发生的事情:

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)

enter image description here

好吧,这可能是问题所在;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

给:

enter image description here