SqlServer根據時段統計數據


create table ST_PPTN_R_Real
(
TID int primary key identity(1,1),
STCD varchar(100) not null,
TM datetime not null,
DRP decimal(8,2) 
)
go
 
insert into ST_PPTN_R_Real values('龍谷站點','2013-05-01 00:00:00.000','52.3')
insert into ST_PPTN_R_Real values('龍谷站點','2013-05-01 00:35:00.000','77.3')
insert into ST_PPTN_R_Real values('龍谷站點','2013-05-01 00:44:00.000','46.4')
insert into ST_PPTN_R_Real values('龍谷站點','2013-05-02 15:21:00.000','85.5')
insert into ST_PPTN_R_Real values('龍谷站點','2013-05-03 05:16:00.000','42.3')
insert into ST_PPTN_R_Real values('龍谷站點','2013-05-03 22:31:55.000','160.77')
insert into ST_PPTN_R_Real values('奇峯峯巔','2013-05-01 02:41:00.000','23.3')
insert into ST_PPTN_R_Real values('奇峯峯巔','2013-05-03 14:50:00.000','564.3')
insert into ST_PPTN_R_Real values('奇峯峯巔','2013-05-05 22:33:00.000','77.5')
insert into ST_PPTN_R_Real values('枉顧站地','2013-05-03 02:01:00.000','43.3')
insert into ST_PPTN_R_Real values('枉顧站地','2013-05-03 05:21:00.000','67.3')
insert into ST_PPTN_R_Real values('枉顧站地','2013-05-06 14:42:00.000','56.4')
insert into ST_PPTN_R_Real values('枉顧站地','2013-05-06 15:21:00.000','83.5')
insert into ST_PPTN_R_Real values('柳體站點','2013-05-14 07:00:00.000','34.3')
insert into ST_PPTN_R_Real values('柳體站點','2013-05-15 09:35:00.000','23.3')
insert into ST_PPTN_R_Real values('柳體站點','2013-05-16 11:44:00.000','62.4')
insert into ST_PPTN_R_Real values('柳體站點','2013-05-16 18:44:00.000','73.4')
insert into ST_PPTN_R_Real values('柳體站點','2013-05-17 09:44:00.000','66.4')
go
 
select * from ST_PPTN_R_Real
go



(一)首先,把條件表準備好:
1.按照每時統計(其中master..spt_values等於master.dbo.spt_values爲系統表,number爲其中的子段,其實還有更方便的小時統計分組,但這裏都套用了一個思路,就直接寫下來了)
 
select CONVERT(varchar(20),dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(hour,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'



------這裏纔是真正的重點:
2.按照每天統計(這裏的天與所理解的天不太一樣,是根據時段設定的天,例如這裏從本日的8點開始到次日的8點結束爲一天)
 
select convert(varchar(10),cast('2013-04-01 00:00:00' as datetime)+number,120) rq,
cast(replace(convert(varchar,dateadd(d,0,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) begin_time,
cast(replace(convert(varchar,dateadd(d,1,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) end_time
from master..spt_values where type='P'





3.按照每月統計(其實還有更方便的月統計分組,但這裏都套用了一個思路,就直接寫下來了)
select CONVERT(varchar(7),dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(MONTH,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'




(二)開始分組統計
 
1.按照每時統計


select b.STCD,a.rq,sum(b.DRP) hj from
(
select CONVERT(varchar(20),dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(hour,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(hour,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'
) a
inner join
ST_PPTN_R_Real b
on
b.TM>=a.begin_time and b.TMgroup by STCD,rq order by STCD,rq desc



2.按照每天統計


select STCD,a.rq,sum(b.DRP) hj from
(
select convert(varchar(10),cast('2013-04-01 00:00:00' as datetime)+number,120) rq,
cast(replace(convert(varchar,dateadd(d,0,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) begin_time,
cast(replace(convert(varchar,dateadd(d,1,cast('2013-04-01 00:00:00' as datetime)+number),120),'00:00:00','08:00:00') as datetime) end_time
from master..spt_values where type='P'
) a
inner join
ST_PPTN_R_Real b
on
b.TM>=a.begin_time and b.TMgroup by STCD,rq order by STCD,rq desc





3.按照每月統計


select b.STCD,a.rq,sum(b.DRP) hj from
(
select CONVERT(varchar(7),dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) rq,
cast(convert(varchar,dateadd(MONTH,number,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) begin_time,
cast(convert(varchar,dateadd(MONTH,number+1,cast('2013-04-01 00:00:00' as datetime)),120) as datetime) end_time
from master..spt_values where type='P'
) a
inner join
ST_PPTN_R_Real b
on
b.TM>=a.begin_time and b.TMgroup by STCD,rq order by STCD,rq desc






發佈了25 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章