首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个用电量分时统计的有关问题

2013-11-02 
请教一个用电量分时统计的问题如下一张表:时间电表读数2013-10-1 0:01:041002013-10-1 7:59:041692013-10-

请教一个用电量分时统计的问题
如下一张表:

时间                   电表读数
2013-10-1 0:01:04      100
2013-10-1 7:59:04      169
2013-10-1 8:01:04      170
2013-10-1 23:59:04     249
2013-10-2 0:01:04      250
2013-10-2 7:59:04      449
2013-10-2 8:01:04      500
2013-10-2 23:59:04     750
其中0点到8点是谷电,8点到24点是峰电
想得到如下的结果

时间        谷电电量   峰电电量
2013-10-1   69         79
2013-10-2   199        250

实在想不出查询语句,请赐教
[解决办法]

select
  convert(varchar(10,时间,120) as 时间,
  max(case when datepart(hh,时间) between 0 and 7 then 电表读数 else 0 end)-
  min(case when datepart(hh,时间) between 0 and 7 then 电表读数 else 0 end) as 谷电电量,
  max(case when datepart(hh,时间) between 8 and 23 then 电表读数 else 0 end)-
  min(case when datepart(hh,时间) between 8 and 23 then 电表读数 else 0 end) as 峰电电量
from
  tb
group by
  convert(varchar(10,时间,120)
 
[解决办法]
create table #tb(时间 datetime,电表读数 int)
insert into #tb
select '2013-10-1 0:01:04',100
union all select '2013-10-1 7:59:04',169
union all select '2013-10-1 8:01:04',170
union all select '2013-10-1 23:59:04',249
union all select '2013-10-2 0:01:04',250
union all select '2013-10-2 7:59:04',449
union all select '2013-10-2 8:01:04',500
union all select '2013-10-2 23:59:04',750

select
  convert(varchar(10),时间,120) as 时间,
  max(case when datepart(hh,时间) between 0 and 7 then 电表读数 end)-
  min(case when datepart(hh,时间) between 0 and 7 then 电表读数 end) as 谷电电量,
  max(case when datepart(hh,时间) between 8 and 23 then 电表读数 end)-
  min(case when datepart(hh,时间) between 8 and 23 then 电表读数 end) as 峰电电量
from   #tb
group by   convert(varchar(10),时间,120)


/*
时间        谷电电量   峰电电量
----------------------------------
2013-10-016979
2013-10-02199250

*/

热点排行