我得到的数据如下:

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

10-08 11:18