SQL按照日期分组查询

1. 按照天统计分组

--按照天统计3

select b.data_time,isnull(a.val,0) as val
from (
select convert(varchar(10),dateadd(DAY,number,'2018-08-01'),120)  as data_time
from master..spt_values where datediff(DAY,dateadd(day,number,'2018-08-01'), '2018-08-05')>0 and number>=0 and type='p') b
left join 
( select convert(nvarchar(10),data_time,120) as data_time,ISNULL(avg(val),0.0) as val  from tableName where data_time >='2018-08-01' and data_time < '2018-08-05'  group by convert(nvarchar(10),data_time,120)
) as a on a.data_time=b.data_time;

2.按照月统计分组

--按照月统计

select b.data_time,isnull(a.val,0) as val
from(
select convert(varchar(10),dateadd(MONTH,number,'2018-08-01'),120)  as data_time
from
    master..spt_values 
where 
    datediff(MONTH,dateadd(MONTH,number,'2018-08-01'), '2018-11-01')>0
    and number>=0 
    and type='p') b
left join 
( select datename(year,data_time)+ '-' + datename(MONTH,data_time)+'-01' as data_time ,ISNULL(avg(val),0.0) as val from  tableName  
  where data_time >='2018-08-01' and data_time < '2018-11-01'
  group by datename(year,data_time)+ '-' + datename(MONTH,data_time)+'-01'
) as a on a.data_time=b.data_time;

3.按照年统计分组

--按照年统计

select b.data_time,isnull(a.val,0) as val
from(
select convert(varchar(10),dateadd(year,number,'2017-01-01'),120)  as data_time
from master..spt_values 
where datediff(year,dateadd(year,number,'2017-01-01'), '2019-01-01')>0
    and number>=0 
    and type='p') b
left join 
( select datename(year,data_time)+ '-01-01' as data_time ,ISNULL(avg(val),0.0) as val from  tableName where data_time >='2017-01-01' and data_time < '2019-01-01'
  group by datename(year,data_time)+ '-01-01'
) as a on a.data_time=b.data_time

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值