通過開始時間和結束時間按月統計工作天數

     這個問題如果給出的開始時間和結束時間是不跨月的比較容易做,直接用datediff()函數求出每個時間段的天數,然後sum一下就可以了,但如果時間段跨月了,就不能這樣算了。

     這裏藉助一下master庫的spt_values表,對,還是它,也可以通過自增列和其他一些系統表做個臨時序列表。

 

--要統計每臺機每個月使用情況
if object_id('[T]') is not null drop table [T]
go
create table [T]([機器號] varchar(2),[startdate] datetime,[enddate] datetime)
insert [T]
select '1#','2009-10-20','2009-10-25' union all
select '1#','2009-09-26','2009-10-05' union all
select '2#','2009-09-12','2009-09-20' union all
select '2#','2009-09-25','2009-10-10' union all
select '2#','2009-10-25','2009-11-15' union all
select '3#','2009-08-10','2009-11-05' union all
select '2#','2009-11-25','2009-12-30'

select
  機器號,
  convert(varchar(7),dt,120) as [/],
  count(1) as 天數
from
  (
   select 機器號,dateadd(dd,b.number,a.startdate) as dt
   from T as a,master..spt_values b
   where b.type='P'
   and dateadd(dd,b.number,a.startdate)<=a.enddate
   ) t
group by
  機器號,convert(varchar(7),dt,120)
order by
  機器號,convert(varchar(7),dt,120)

/**
機器號  年/月     天數
---- ------- -----------
1#   2009-09 5
1#   2009-10 11
2#   2009-09 15
2#   2009-10 17
2#   2009-11 21
2#   2009-12 30
3#   2009-08 22
3#   2009-09 30
3#   2009-10 31
3#   2009-11 5

(10 行受影響)
**/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章