统计一个时间段用户的注册人数,没有则为0

Posted on 2015-11-13 10:56  forever_java  阅读(427)  评论(0)    收藏  举报

我的思路是  先生成一个这个时间段的连续日期表,这一步用一个方法来完成,然后用用户表又连接这张临时表来筛选。

 

 

--生成一个这个时间段的连续日期表的 FUNCTION

-- =============================================
-- Author:huxiongjava@sina.com
-- Create date: 2015-11-13
-- Description: 生成一个时间区间的所有时间
-- =============================================
ALTER FUNCTION [dbo].[Fun_GenerateTimeV2]
 ( 
    @begin_date datetime,
    @end_date datetime 

returns @t table(date datetime) as begin 
    insert into @t 
    select dateadd(dd,number,@begin_date) AS date     from master..spt_values 
    where type='p' and dateadd(dd,number,@begin_date)<=@end_date     return end 

 

 

--查询代码

SELECT
CONVERT (VARCHAR(100), b. DATE, 23) AS data,
COUNT (a.id) AS addPlayer
FROM
T_PlayerExtend a
RIGHT JOIN (
SELECT
*
FROM
dbo.Fun_GenerateTimeV2 ('2015-07-04', '2015-07-10')
) b ON CONVERT (
VARCHAR (100),
a.RegistingTime,
23
) = CONVERT (VARCHAR(100), b. DATE, 23)
GROUP BY
CONVERT (VARCHAR(100), b. DATE, 23)

 

 

查询结果如下:

data      addUserTotal

2015-07-04   1
2015-07-05   0
2015-07-06   31
2015-07-07   29
2015-07-08   24
2015-07-09   26
2015-07-10   23

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3