我有一个存储过程来提取数据并加入去年的日期数据.问题是当前年度数据无法加入,因为2011年2月29日没有.有其他人遇到过这个问题吗?任何人对如何解决它有任何想法?
这是存储过程:
SELECT
--b.Date_Rep AS Date_Rep,
SUM(b.AccountsCreatedThisYear) AS AccountsCreatedThisYearTot,
SUM(a.AccountsCreatedThisYear) AS AccountsCreatedLastYearTot,
FROM Report2011.dbo.T_Report_01 b WITH (NOLOCK) --This year
LEFT JOIN Report2011.dbo.T_Report_01 a WITH (NOLOCK) ON DATEADD(yyyy,-1,b.Date_Rep) = a.date_rep --Last year
WHERE (a.Date_Rep BETWEEN DATEADD(year, -1,@StartDate) AND DATEADD(year, -1,@EndDate))
Run Code Online (Sandbox Code Playgroud)
declare @29Feb datetime = convert(datetime,'2012/02/29')
declare @28Feb datetime = convert(datetime,'2012/02/28')
select case when
dateadd(yy,-1,@29Feb) = dateadd(yy,-1,@28Feb)
then 1
else 0 end
Run Code Online (Sandbox Code Playgroud)
该 select 语句输出 1,因此实际上 2 月 29 日和 2 月 28 日日期在过去的一年中只有一个对应的日期,即 2 月 28 日。
现在,您正在对不同年份的两个期间进行求和,而第一个期间恰好比当前期间少 1 天。
有人会如何回答以下问题:
"How many accounts have been created in the last year's February and how many this year?"
Run Code Online (Sandbox Code Playgroud)
一个二月有 28 天,另一个二月有 29 天,这重要吗?我不相信,参考的是二月,而不是日子。
所以我看到这个查询有两个问题:
SELECT (SUM(b.AccountsCreatedThisYear)
FROM Report2011.dbo.T_Report_01 WITH (NOLOCK) --This year
WHERE Date_Rep BETWEEN @StartDate and @EndDate ) as AccountsCreatedThisYearTot,
(SUM(b.AccountsCreatedThisYear)
FROM Report2011.dbo.T_Report_01 WITH (NOLOCK) -- Last Year
WHERE Date_Rep BETWEEN DATEADD(year, -1,@StartDate) AND DATEADD(year, -1,@EndDate)) as AccountsCreatedLastYearTot
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |