找回密码
 立即注册

QQ登录

只需一步,快速开始

ccdhb

注册会员

1

主题

1

帖子

7

积分

注册会员

积分
7
最新发帖

[已处理] 求助:

ccdhb
注册会员   /  发表于:2017-8-16 11:51  /   查看:4457  /  回复:1
最近有个需要就是对比去年同期的数据,但是不是去年的今天,而是临近的星期,如下图,请教如何实现?
image.png525635070.png

1 个回复

倒序浏览
williamluo
高级会员   /  发表于:2017-8-16 14:05:11
沙发
使用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
是为了找到日期尽量接近的那个星期,而不是找周次相同的去年的同一个星期几。
查询结果如下图所示:

image.png136348265.png

请注意:
(1)周日=2 表示是星期一 (1=星期天)
(2)2016/7/25的那个周一是2016年的第31周,而2017/7/24那个周一却是第30周。


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部