我得到的数据如下:
Date UserID Visits
2012-01-01 2 5
...
我想输出在至少y个日期有超过x次访问的用户列表(例如,从1月3日到1月10日有超过5次访问的用户至少有3次访问)。
最佳答案
试试这个:
SELECT SUB.UserId, COUNT(*) FROM (
SELECT VL.UserId FROM VisitLog VL
WHERE VL.Visits > 5
AND VL.Date BETWEEN '2014-01-03' AND '2014-01-10') SUB
GROUP BY SUB.UserId
HAVING COUNT(*) >= 3
子查询返回样本日期范围内
Visits > 5
个数所在的所有行。然后计算结果以仅返回与此条件匹配至少3次的用户。
您没有提供太多信息,但如果每个用户每个日期都有多个记录,则使用此查询(完全相同的主体,只是按用户和日期求和的内部分组):
SELECT SUB.UserId, COUNT(*) FROM (
SELECT VL.UserId, VL.Date FROM VisitLog VL
WHERE VL.Date BETWEEN '2014-01-03' AND '2014-01-10'
GROUP BY VL.UserId, VL.Date
HAVING SUM(VL.Visits) > 5) SUB
GROUP BY SUB.UserId
HAVING COUNT(*) >= 3