Mysql 获取过去三年内发出请求的所有用户

Mysql 获取过去三年内发出请求的所有用户,mysql,sql,postgresql,group-by,Mysql,Sql,Postgresql,Group By,我想获得过去三年中所有提出请求的用户列表 请求(请求id、请求日期、用户id、用户配置文件id) 我做得对吗 SELECT user_id FROM requests WHERE EXTRACT(YEAR FROM request_day) IN ( 2014,2015,2016 ) GROUP BY user_id HAVING COUNT(*) = 3; 你目前的方法几乎是正确的。你所需要做的就是按不同的年数计算: SELECT user_id FROM requests WHERE

我想获得过去三年中所有提出请求的用户列表

请求(请求id、请求日期、用户id、用户配置文件id)

我做得对吗

SELECT user_id
  FROM requests
WHERE EXTRACT(YEAR FROM request_day) IN ( 2014,2015,2016 )
GROUP BY user_id
HAVING COUNT(*) = 3;
你目前的方法几乎是正确的。你所需要做的就是按不同的年数计算:

SELECT user_id
FROM requests
WHERE YEAR(request_day) IN (2014, 2015, 2016)
GROUP BY user_id
HAVING COUNT(DISTINCT YEAR(request_day)) = 3;
如果
DISTINCT
年数为3,则表示用户在
WHERE in
子句中拥有所有三年

请注意,另一种方法是条件聚合:

SELECT user_id
FROM requests
GROUP BY user_id
HAVING SUM(CASE WHEN YEAR(request_day) = 2014 THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN YEAR(request_day) = 2015 THEN 1 ELSE 0 END) > 0 AND
       SUM(CASE WHEN YEAR(request_day) = 2016 THEN 1 ELSE 0 END) > 0

如果您的查询变得更复杂,这种方法可以更好地扩展。

我不知道,您做得对吗?谢谢您的解决方案。。。我喜欢第二个!!:)