通过开始时间和结束时间按月统计工作天数
2009-10-19 19:12
691 查看
这个问题如果给出的开始时间和结束时间是不跨月的比较容易做,直接用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 行受影响)
**/
这里借助一下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 行受影响)
**/
相关文章推荐
- 输入【开始时间】和【结束时间】,计算工作天数,需考虑节假日周末和调休
- 输入开始时间和工作天数,计算结束时间,需考虑节假日周末和调休
- 新工作之初+问题:结束日期要大于开始日期+天数
- php获到一个月的最大天数,和这个星期的开始时间和结束时间
- C# 通过一个开始时间和结束时间 按【AddDays】拆分成一个数组
- 计算结束时间与开始时间的相差的天数:
- .Net时间计算函数,统计某一天是一年的第几周,这一周从哪天开始到哪天结束
- 项目经验:通过开始时间、结束时间查询日期to_char()
- 计算两日期相差天数(用字符串格式的时间形式来比较)、将时间戳转为字符串,开始到结束的时间差(用时间戳来比较)
- DB2怎么根据开始和结束时间算相隔天数
- JAVA通过某年的几周获取该周的开始时间和结束时间
- 创建一张表,记录电话呼叫员的工作流水,记录呼叫员编 号、对方号码、通话开始时间、通话结束时间。建表、插数 据等最后都自己写SQL语句。
- .Net时间计算函数,统计某一天是一年的第几周,这一周从哪天开始到哪天结束
- 根据请假开始时间和结束时间获得天数小时数分钟数
- .Net时间计算函数,统计某一天是一年的第几周,这一周从哪天开始到哪天结束
- 已知开始工作时间和工作日期计算工作日结束时间
- 开始时间,结束时间,获得中间的时间天数的集合
- Orcle存储过程统计最近30分钟和最近60分钟最大降雨及降雨开始时间和结束时间
- 通过时间,获得星期的开始时间,结束时间
- android 通过当前日期获取这个礼拜的开始时间和结束时间