使用SQL的DatePart函数可准确找到某个日期对应去年的同一个星期几:
select I1.IncomeDate 日期, I2.IncomeDate 去年同日
,datepart(yyyy,I1.IncomeDate) 年份,datepart(yyyy,I2.IncomeDate) 去年年份
,datepart(wk,I1.IncomeDate) 周次,datepart(wk,I2.IncomeDate) 去年周次
,datepart(dw,I1.IncomeDate) 周日,datepart(dw,I2.IncomeDate) 去年周日
from Income I1 left join Income I2 on I2.CompanyId=I1.CompanyId and I2.IncomeType=I1.IncomeType
and datepart(yyyy,I2.IncomeDate)=2016
and abs(datediff(day, I1.IncomeDate,dateadd(year,1,I2.IncomeDate)))<4
and datepart(dw,I1.IncomeDate) = datepart(dw,I2.IncomeDate)
where 1=1
and datepart(yyyy,I1.IncomeDate)=2017
其中,
and abs(datediff(day, I1.IncomeDate,dateadd(year,1,I2.IncomeDate)))<4
是为了找到日期尽量接近的那个星期,而不是找周次相同的去年的同一个星期几。
查询结果如下图所示:
请注意:
(1)周日=2 表示是星期一 (1=星期天)
(2)2016/7/25的那个周一是2016年的第31周,而2017/7/24那个周一却是第30周。
|