表格如下所示:
id | event_id | date |
1 | 2 | 2016-04-29
2 | 2 | 2016-04-31
3 | 1 | 2016-04-30
4 | 1 | 2016-04-31
我需要运行一个查询,该查询将返回分组的 event_ids,其中包含请求时间段之间的所有日期。
例如,查看上表:
如果查询是(=> 2016-04-29 )
:( <= 2016-04-31 )
,不应返回任何事件。
如果查询是(=> 2016-04-30 )
:( <= 2016-04-31 )
,应该返回 event_id = 1。
如何解决这个问题?
最佳答案
你会想到这样的事情:
SELECT event_id AS eid FROM `test` WHERE date BETWEEN '2016-04-30' AND '2016-04-31'
GROUP BY event_id
HAVING COUNT(*) = (SELECT COUNT(*) FROM `test` WHERE event_id = eid)
或者这个:
SELECT event_id AS eid FROM `test` WHERE date IN ('2016-04-30', '2016-04-31')
GROUP BY event_id
HAVING COUNT(*) = (SELECT COUNT(*) FROM `test` WHERE event_id = eid)
顺便说一句,四月只有 30 天
关于MySQL:多行内的 "AND"条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36939170/