我正在寻找关于检索过去6个月中所有活动的用户ID列表的最佳解决方案。
简化的表结构和数据如下:
id client_id created_at
1 1 2019-07-01
2 2 2019-07-01
3 1 2019-08-01
4 1 2019-08-15
5 1 2019-09-01
6 1 2019-10-01
7 1 2019-11-01
我需要检索最近6个月中至少有一项活动的用户列表。在前面的示例中,仅client_id
1
我以为可以参加,但似乎太昂贵了。
有什么好主意吗?
您可以将GROUP BY
和HAVING
一起使用:
SELECT client_id
FROM table_name
WHERE created_at BETWEEN DATE_SUB(NOW(), INTERVAL 6 MONTH) AND NOW()
GROUP BY client_id
HAVING COUNT(DISTINCT CONCAT(YEAR(created_at), MONTH(created_at))) = (SELECT COUNT(DISTINCT CONCAT(YEAR(created_at), MONTH(created_at))) FROM table_name)