SQL查询如何查找1月份(混合年份)最近几个月的数据SQL Server 2008

SQL查询如何查找1月份(混合年份)最近几个月的数据SQL Server 2008,sql,datetime,sql-server-2008-r2,date-range,getdate,Sql,Datetime,Sql Server 2008 R2,Date Range,Getdate,我正在创建一个查询以提取过去3个月的记录。我遇到的问题是,过去的x个月与前一年发生了冲突。我想我有办法,但我觉得有更好的办法 字段:asiplayer。使用的日期是一个日期时间字段 下面的代码似乎正在运行(但是我如何在7月份的1月份进行测试?) 有更好的办法吗?如果是最后6个月,我会继续这段代码吗 WHERE -- ACTIVE LIST (LAST 3 MONTHS) ( ( --Current Month is Not January or February, so all 3 mon

我正在创建一个查询以提取过去3个月的记录。我遇到的问题是,过去的x个月与前一年发生了冲突。我想我有办法,但我觉得有更好的办法

字段:asiplayer。使用的日期是一个日期时间字段

下面的代码似乎正在运行(但是我如何在7月份的1月份进行测试?)

有更好的办法吗?如果是最后6个月,我会继续这段代码吗

WHERE
-- ACTIVE LIST (LAST 3 MONTHS)
(

(   --Current Month is Not January or February, so all 3 months are in current year

        MONTH(CURRENT_TIMESTAMP) NOT IN (1,2) 
        AND MONTH(asiplayer.date_used) >= MONTH(DateAdd(month,-2,CURRENT_TIMESTAMP)) 
        AND YEAR(asiplayer.date_used) = YEAR(CURRENT_TIMESTAMP)
) 


    OR  --It's January so some of the months are last year

(           
        --Get November and December of the Previous Year    
        (MONTH(CURRENT_TIMESTAMP) = 1 AND   (MONTH(asiplayer.date_used) = MONTH(DateAdd(month,-2,CURRENT_TIMESTAMP)) OR MONTH(asiplayer.date_used) = MONTH(DateAdd(month,-1,CURRENT_TIMESTAMP)))
            AND YEAR(asiplayer.date_used) = YEAR(DateAdd(year,-1,CURRENT_TIMESTAMP))
        )

        OR  
            --Get January of the Current Year
            (MONTH(CURRENT_TIMESTAMP) = 1 
            AND MONTH(asiplayer.date_used) = 1 
            AND YEAR(asiplayer.date_used) = YEAR(CURRENT_TIMESTAMP)
            )

)   


    OR --It's February so some of the months are last year


(           
        --Get December of the Previous Year 
        (MONTH(CURRENT_TIMESTAMP) = 2 AND MONTH(asiplayer.date_used) = MONTH(DateAdd(month,-2,CURRENT_TIMESTAMP)) 
            AND YEAR(asiplayer.date_used) = YEAR(DateAdd(year,-1,CURRENT_TIMESTAMP))
        )

        OR  
            --Get January & February of the Current Year
            (MONTH(CURRENT_TIMESTAMP) = 2 
            AND MONTH(asiplayer.date_used) IN (1,2) 
            AND YEAR(asiplayer.date_used) = YEAR(CURRENT_TIMESTAMP)
            )

)   

)   

Serg提供了答案:


DATEDIFF(月,asiplayer.date_used,CURRENT_TIMESTAMP)DATEDIFF(月,asiplayer.date_used,CURRENT_TIMESTAMP)神圣的烟雾塞格,我感觉有一种更简单的方法,但不是那么简单!谢谢哎呀,我浪费了这么多代码和时间|是的,这是前几天发生的。