if object_id('date') is not null
drop table date
go
create table date(dt datetime,isoffday tinyint)
go
declare @startdate datetime,@enddate datetime
set @startdate = '2008-01-01'
set @enddate = '2009-01-01'
while @startdate<@enddate
begin
insert into date(dt,isoffday) select @startdate,case when (datepart(dw,@startdate)+@@datefirst-1)%7 in(0,6) then 1 else 0 end
set @startdate = @startdate + 1
enddeclare @tb table (name varchar(50),startdate datetime,enddate datetime)
insert into @tb select 'wzy_love_sly','2008-08-01','2008-08-03'
insert into @tb select 'wzy_love_sly','2008-08-05','2008-08-25'
insert into @tb select 'wzy_love_sly','2008-08-25','2008-08-25'
insert into @tb select 'kaukiyou','2008-08-25','2008-08-25'select name as 员工,sum(days) as 工作天数,sum(days)*100 as 工资 from (
select *,(select count(1) from date where dt between t.startdate and t.enddate and isoffday=0)as days
from @tb t)t group by name员工 工作天数 工资
kaukiyou 1 100
wzy_love_sly 17 1700
drop table date
go
create table date(dt datetime,isoffday tinyint)
go
declare @startdate datetime,@enddate datetime
set @startdate = '2008-01-01'
set @enddate = '2009-01-01'
while @startdate<@enddate
begin
insert into date(dt,isoffday) select @startdate,case when (datepart(dw,@startdate)+@@datefirst-1)%7 in(0,6) then 1 else 0 end
set @startdate = @startdate + 1
enddeclare @tb table (name varchar(50),startdate datetime,enddate datetime)
insert into @tb select 'wzy_love_sly','2008-08-01','2008-08-03'
insert into @tb select 'wzy_love_sly','2008-08-05','2008-08-25'
insert into @tb select 'wzy_love_sly','2008-08-25','2008-08-25'
insert into @tb select 'kaukiyou','2008-08-25','2008-08-25'select name as 员工,sum(days) as 工作天数,sum(days)*100 as 工资 from (
select *,(select count(1) from date where dt between t.startdate and t.enddate and isoffday=0)as days
from @tb t)t group by name员工 工作天数 工资
kaukiyou 1 100
wzy_love_sly 17 1700
134217743 2007-01-22 23:00:06.000 2007-01-23 23:04:34.000
134217838 2007-01-23 22:52:20.000 2007-01-23 23:04:44.000
现在需要统计出,每天每个小时每类ID的在线人数,只要有在某个小时段内就算在线一次,如第二条记录134217838 2007-01-23 22:52:20.000 2007-01-23 23:04:44.000
则需统计出:
134217838 2007-01-23 22
134217838 2007-01-23 23
第一条则统计出:
134217743 2007-01-22 23
134217743 2007-01-23 0
134217743 2007-01-23 1
。
。
。
134217743 2007-01-23 22
134217743 2007-01-23 23
谢谢各位!帮忙解决问题,帮忙顶!
declare @a table(ID varchar(20),开始时刻 smalldatetime,结束时刻 smalldatetime)
insert @a select '134217743','2007-01-22 23:00:06.000','2007-01-23 23:04:34.000'
union all select '134217838','2007-01-23 22:52:20.000','2007-01-23 23:04:44.000'select top 100 id=identity( int,0,1) into # from syscolumns a,syscolumns bselect a.id,
convert(varchar(10),dateadd(hour,b.id,开始时刻),120)日期,
datepart(hour,dateadd(hour,b.id,开始时刻)) 时间数
from @a a,# b
where datediff(hour,dateadd(hour,b.id,开始时刻),结束时刻)>=0
order by a.id,日期,时间数drop table #
/*
id 日期 时间数
-------------------- ---------- -----------
134217743 2007-01-22 23
134217743 2007-01-23 0
134217743 2007-01-23 1
134217743 2007-01-23 2
134217743 2007-01-23 3
134217743 2007-01-23 4
134217743 2007-01-23 5
134217743 2007-01-23 6
134217743 2007-01-23 7
134217743 2007-01-23 8
134217743 2007-01-23 9
134217743 2007-01-23 10
134217743 2007-01-23 11
134217743 2007-01-23 12
134217743 2007-01-23 13
134217743 2007-01-23 14
134217743 2007-01-23 15
134217743 2007-01-23 16
134217743 2007-01-23 17
134217743 2007-01-23 18
134217743 2007-01-23 19
134217743 2007-01-23 20
134217743 2007-01-23 21
134217743 2007-01-23 22
134217743 2007-01-23 23
134217838 2007-01-23 22
134217838 2007-01-23 23(所影响的行数为 27 行)*/
drop table date
go
create table date(dt datetime,isoffday tinyint)
go
declare @startdate datetime,@enddate datetime
set @startdate = '2008-01-01'
set @enddate = '2009-01-01'
while @startdate<@enddate
begin
insert into date(dt,isoffday) select @startdate,case when (datepart(dw,@startdate)+@@datefirst-1)%7 in(0,6) then 1 else 0 end
set @startdate = @startdate + 1
enddeclare @tb table (name varchar(50),startdate datetime,enddate datetime)
insert into @tb select 'wzy_love_sly','2008-08-01','2008-08-03'
insert into @tb select 'wzy_love_sly','2008-08-05','2008-08-25'
insert into @tb select 'wzy_love_sly','2008-08-25','2008-08-25'
insert into @tb select 'kaukiyou','2008-08-25','2008-08-25'select name as 员工,count(1) as 工作天数,count(1)*100 as 工资 from (
select distinct a.name,b.dt from @tb a join date b on b.dt between a.startdate and a.enddate
where b.isoffday=0)t
group by name员工 工作天数 工资
kaukiyou 1 100
wzy_love_sly 16 1600还是我工资多....