SQL Server 在WHERE中使用日期筛选器并使用SQL计算度量时,结果不同

jexiocij  于 2022-11-21  发布在  其他
关注(0)|答案(1)|浏览(201)

例如,我想计算年初至今的数据(从1月1日到今天-1),因为今天是14-11-22,所以它将从01-01-22开始计数,直到13-11-22。
下面是我的疑问:

SELECT COUNT(CASE WHEN 
                    DATEPART(Year, booking_date ) = Datepart(Year, GETDATE()) AND 
                    DATEPART(Month, booking_date ) <= DATEPART(Month, Getdate()) AND
                    DATEPART(Day, booking_date ) < DATEPART(Day, Getdate()) THEN 
                    booking_date END) as "YearToDate" 
FROM booking_table

为了仔细检查结果,我创建了一个不同的查询,使用WHERE筛选器对数据进行计数:

SELECT count(booking_date)
FROM prod.booking_table
WHERE booking_date >= '2022-01-01 00:00:00.000000'
  AND booking_date < '2022-11-14 00:00:00.000000'

不幸的是,这些查询产生的结果有很大的不同。我相信我的查询逻辑是正确的,但我不确定计算中缺少了哪一部分数据。
任何帮助将不胜感激,谢谢!

juzqafwq

juzqafwq1#

如果今天是1号,你的情况

AND DATEPART(Day, booking_date ) < DATEPART(Day, Getdate())

将每天过滤掉,与月份无关。
如果月份相同(否则,日期无关紧要),您只需要按天过滤,例如,您可以使用

DATEPART(Year, booking_date ) = Datepart(Year, GETDATE()) AND 
 DATEPART(Month, booking_date ) <= DATEPART(Month, Getdate()) AND
 (DATEPART(Day, booking_date ) < DATEPART(Day, Getdate()) OR 
  DATEPART(Month, booking_date ) < DATEPART(Month, Getdate()))

尽管如此,我还是建议您使用第二个查询。

相关问题