我有两张桌子..
1)用户 使用列:
userid createddate
1 01/01/2016
2 02/01/2016
3 03/01/2016
2)剧 使用列:
userid playdate
1 07/03/2016
2 06/04/2016
上面显示的日期是MM / dd / yyyy格式 从表Plays我得到了一个表格丰富的表格,每个用户标识只有一个顶行
users表有大约5 mil的行,而richhedplays有大约3mil的行。 有很多用户虽然在用户中不在播放中。
我需要将每月用户(在MONTH(createddate)上)与播放中存在的用户ID进行分组。
我的意思是在1月份用户表中有10个用户。 在这10个用户中,只有5个用户出现在播放表中,并且它们出现在哪个月无关紧要。
所以,在我得到的数据中,我需要5对1月。
因此,对于上面的样本数据,结果将是
Jan-2016 1
Feb-2016 1
March-2016 0
虽然,我使用的是SQL SERVER,但它可能会发生变化,所以会很感激标准sql的答案。
答案 0 :(得分:0)
尝试以下查询,
SELECT createddate, SUM(CASE WHEN ep.userid IS NOT NULL THEN 1 ELSE 0 END) sum_value
FROM users u
LEFT JOIN enrichedplays ep
ON u.userid = ep.userid
GROUP BY createddate;
注意:请将createddate转换为您需要的格式。
答案 1 :(得分:0)
您需要根据createddate
的月份和年份对用户进行分组。
检查以下查询,希望它可以帮助您:
declare @users table(userid int, createddate datetime)
declare @plays table(userid int, playdate datetime)
Insert into @users
select 1, '01/01/2016'
union
select 2, '01/01/2016'
union
select 1, '02/01/2016'
union
select 2, '03/01/2016'
union
select 3, '03/01/2016'
Insert into @plays
select 1, '01/01/2016'
union
select 2, '01/01/2016'
select format(u.createddate,'MMM-yyyy'), SUM(CASE WHEN p.userid IS NOT NULL THEN 1 ELSE 0 END) sum_value
from @users u
left join @plays p on p.userid = u.userid
Group By format(u.createddate,'MMM-yyyy')