数据库查询相隔同等时间段的数据量

来源:互联网 发布:企政oa软件下载 编辑:程序博客网 时间:2024/04/30 03:49

比如说一张人员基本信息表,emp_baseinfo;

包含两个字段,聘用日期:emp_pydate和

                            离职日期:emp_lzdate。

现在要按条件查询每隔7天的在职人员数量,                          

如果查询条件是2016-02-01,

那么截止到2016-02-01是多少人,
        截止到2016-01-25是多少人,
        截止到2016-01-18是多少人,
        截止到2016-01-11是多少人,
        截止到2016-01-04是多少人,

也就是说按查询条件开始查起,每减去7天查一次,直到当年1月日期不能再减为止。

笔者这里用的是sqlserver2008,具体实现如下:

declare @num varchar(100)declare @sql varchar(1000)      set @num ='2016-04-10'      set @sql =''while @num>='2016-01-01'begin IF (@num>'2016-01-07')      begin      set @sql=@sql+'select '''+@num+''' as yyyy,count(*) as n                       from emp_baseinfo                       where (Emp_LzDate IS NULL OR (Emp_LzDate IS NOT NULL AND Emp_LzDate>'''+@num+'''))                              AND emp_pydate<='''+@num+''' union all '      end    ELSE      begin       set @sql=@sql+'select '''+@num+''' as yyyy,count(*) as n                      from emp_baseinfo                      where (Emp_LzDate IS NULL OR (Emp_LzDate IS NOT NULL AND Emp_LzDate>'''+@num+'''))                      AND emp_pydate<='''+@num+''''      end      set @num=convert(VARCHAR(100),dateadd(dd,-7,@num),23)endprint(@sql)exec(@sql)
需要注意的是,当拼接的sql过长的时候,@sql的容量可能不够用,最好使用@sql nvarchar(max);

查询结果如下:

耗时为:

不知有没有更好的办法。

0 0