【问题标题】:How to run a query for year to date based on end date如何根据结束日期运行年初至今的查询
【发布时间】:2012-12-18 03:11:52
【问题描述】:

我有一个基于选择的“结束日期”运行的查询。本质上,用户选择结束日期,查询将根据结束日期运行整个 YTD 的报告。因此,例如,如果我选择“12/3/12”,它应该从 1/1/12 - 12/3/12 运行报告。如果您在当天运行它,这将起作用......今天我尝试在结束日期“12/31/12”运行它但是我没有返回任何结果,因为我认为它试图根据今天的日期获取开始日期?以下是我的查询:

SELECT        Store_Number, COUNT(DISTINCT Customer_Email_Address) AS Customer_email_address, COUNT(DISTINCT Invoice_Number) AS [Total Cars], 
                         @enddate AS End_Date, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AS Start_Date
FROM            Invoice_Tb
WHERE        (Invoice_Date BETWEEN DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), 0) AND CONVERT(Datetime, @enddate, 102))
GROUP BY Store_Number

【问题讨论】:

  • 您的意思是您尝试将getdate() 替换为'2012-12-03'

标签: sql datetime sql-server-2000


【解决方案1】:

GetDate() 替换为@enddate 参数,它应该可以工作:

SELECT        
    Store_Number, 
    COUNT(DISTINCT Customer_Email_Address) AS Customer_email_address, 
    COUNT(DISTINCT Invoice_Number) AS [Total Cars], 
    @enddate AS End_Date, 
    DATEADD(yy, DATEDIFF(yy, 0, @enddate), 0) AS Start_Date
FROM Invoice_Tb
WHERE (Invoice_Date BETWEEN DATEADD(yy, DATEDIFF(yy, 0, @enddate), 0) 
                    AND CONVERT(Datetime, @enddate, 102))
GROUP BY Store_Number

如果您查询:

declare @enddate datetime = '12/31/2012'

select DATEADD(yy, DATEDIFF(yy, 0, @enddate), 0)

它将返回您想要的2012-01-01

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多