我的思路是 先生成一个这个时间段的连续日期表,这一步用一个方法来完成,然后用用户表又连接这张临时表来筛选。
--生成一个这个时间段的连续日期表的 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
浙公网安备 33010602011771号