读书人

存程查10年 每月的在人

发布时间: 2012-01-11 22:28:46 作者: rapoo

存程查10年 每月的在人
我在遇到一~
就是在一料表里查 出每月的 人,表里字段只有每人的日期和的日期~
我需要查10年 每月有多少人在~
有有循判 每月的始和束日期的方法~

以下是手工的一月查的句
Declare @stadate datetime
Declare @enddate datetime
set @stadate = '1998-01-01'
set @enddate = '1998-01-31'
select * from empc where (hold_date <@stadate or (hold_date >=@stadate and hold_date <=@enddate)) and (dimission_date is null or (dimission_date >=@stadate and dimission_date <=@enddate) or dimission_date >@enddate)

在需要查10年每月的人~
前指一下~
先~



[解决办法]
按年月循环,每年每个月份统计一次,把数据追加到临时表中。

[解决办法]


可以不用考虑一个人连续在线超过一个月的情况,那么这样不就可以了吗!

select * from empc where datediff(month,hold_date,@stadate)=0 or datediff(month,dimission_date,@enddate)=0


[解决办法]
create Table T(id int,be datetime, en datetime)
insert into T
select 1 ,'2007-1-1','2007-10-5' union all
select 2 ,'2007-3-1','2007-10-5' union all
select 3 ,'2007-3-1','2007-9-5' union all
select 4 ,'2007-5-1','2007-8-5'

GO
--120月即10年
select top 120 tmp=identity(int,0,1) into # from syscolumns a,syscolumns b

--如某月的人0也要示,可用# left T的方式
select convert(char(06),dateadd(month,tmp, be),112) as [monthly] ,count(*) as num from T
inner join #
on datediff(month,be,en)>=#.tmp
group by convert(char(06),dateadd(month,tmp, be),112)

/*
monthly num
------- -----------
200701 1
200702 1
200703 3
200704 3
200705 4
200706 4
200707 4
200708 4
200709 3
200710 2
*/

drop table T,#

读书人网 >SQL Server

热点推荐