如何基于文件中最新日期而非当前日期获取过去12个月数据
基于最新[Add_Datetime]筛选过去12个月数据的SQL解决方案
你的问题核心是原查询用当前日期(GETDATE())作为筛选基准,但数据库内最新的[Add_Datetime]是2021-05-07,当前日期晚于该值,导致没有符合条件的数据。只需将基准替换为数据库中[Add_Datetime]的最大值即可。
方案一:子查询直接获取最新日期
直接在WHERE子句中嵌套子查询获取最大[Add_Datetime],以此为基准计算过去12个月的起始点:
SELECT [Contact_Id], [Add_Datetime], [Arena_Name], [Event_Date], [Event_Name], [Season_Name], [Seat_Num], [Num_Seats], [Paid_value] FROM [Group CH].[dbo].[CustomerData] WHERE [Add_Datetime] >= DATEADD(Month, DATEDIFF(Month, 0, (SELECT MAX([Add_Datetime]) FROM [Group CH].[dbo].[CustomerData])) - 12, 0)
方案二:使用变量存储最新日期(可读性更好)
先通过变量获取最大[Add_Datetime],再用于筛选逻辑,适合需要复用基准日期的场景:
DECLARE @LatestAddDate DATE = (SELECT MAX([Add_Datetime]) FROM [Group CH].[dbo].[CustomerData]) SELECT [Contact_Id], [Add_Datetime], [Arena_Name], [Event_Date], [Event_Name], [Season_Name], [Seat_Num], [Num_Seats], [Paid_value] FROM [Group CH].[dbo].[CustomerData] WHERE [Add_Datetime] >= DATEADD(Month, DATEDIFF(Month, 0, @LatestAddDate) - 12, 0)
逻辑说明
SELECT MAX([Add_Datetime]):获取数据库中最新的记录日期(即2021-05-07)DATEDIFF(Month, 0, @LatestAddDate):计算从SQL起始日期(1900-01-01)到最新日期的月份数DATEADD(Month, ... - 12, 0):将月份数减12后,再转换为对应的日期,得到过去12个月的起始月份第一天(即2020-05-01)
内容的提问来源于stack exchange,提问作者viivingg
相关产品推荐
相关产品推荐

