两行数据之间的匹配
Match between two row data
我想select匹配结果中的计数,其中匹配计数是日期上的精确整数。
date id_event id_timewindows max_hits
2014-12-16 1 1,2,3 2
2014-12-16 2 2,3,4 2
2014-12-16 3 4 2
2014-12-16 4 5,6 2
2014-12-16 5 7,8 2
2014-12-16 6 9 2
我想要的结果是:
date id_event id_timewindows max_hits
2014-12-16 1 2,3 2
2014-12-16 2 2,3 2
有人知道如何在 MySQL 中实现吗?
更新:
所以我必须解释更多。 id_timewindows
不是 string
属性,第一个是 grouped by id_events
和 one id_event has multiple id_timewindow
.
视图的结果
查看分组前的结果:
date id_event id_timewindow begin end max_rooms
2014-12-16 1 1 06:00:00 07:00:00 2
2014-12-16 1 2 07:00:00 08:00:00 2
2014-12-16 1 3 08:00:00 09:00:00 2
2014-12-16 2 2 07:00:00 08:00:00 2
2014-12-16 2 3 08:00:00 09:00:00 2
2014-12-16 2 4 09:00:00 10:00:00 2
2014-12-16 3 4 09:00:00 10:00:00 2
2014-12-16 4 6 11:00:00 12:00:00 2
2014-12-16 4 5 10:00:00 11:00:00 2
2014-12-16 5 7 12:00:00 13:00:00 2
2014-12-16 5 8 13:00:00 14:00:00 2
2014-12-16 6 9 14:00:00 15:00:00 2
我使用 GROUP BY id_event
而 id_timewindows
是 group_concat(id_timewindow SEPARATOR ',')
我找到了解决方案:
SELECT
date,
id_timewindow,
max_rooms,
COUNT(concat(date, id_timewindow)) as counter
FROM `timewindows_reserved`
GROUP BY
date, id_timewindow
HAVING counter < max_rooms
这将得到与我想要的相反的结果,我可以使用它。
date id_timewindow max_hits
2014-12-16 1 2
2014-12-16 4 2
2014-12-16 5 2
2014-12-16 6 2
2014-12-16 7 2
2014-12-16 8 2
2014-12-16 9 2
如果我按日期分组并从 id_timewindow
中创建一个列表,那么我可以收到与我想要的相同的结果,但采用逆逻辑。不是预留时间窗,而是空闲时间窗。如果我反转这个然后我可以得到结果:
SELECT
date,
id_event,
GROUP_CONCAT(id_timewindow SEPARATOR ','),
max_rooms,
COUNT(concat(date, id_timewindow)) as counter
FROM `table`
GROUP BY
date, id_timewindow
HAVING counter >= max_rooms
我想select匹配结果中的计数,其中匹配计数是日期上的精确整数。
date id_event id_timewindows max_hits
2014-12-16 1 1,2,3 2
2014-12-16 2 2,3,4 2
2014-12-16 3 4 2
2014-12-16 4 5,6 2
2014-12-16 5 7,8 2
2014-12-16 6 9 2
我想要的结果是:
date id_event id_timewindows max_hits
2014-12-16 1 2,3 2
2014-12-16 2 2,3 2
有人知道如何在 MySQL 中实现吗?
更新:
所以我必须解释更多。 id_timewindows
不是 string
属性,第一个是 grouped by id_events
和 one id_event has multiple id_timewindow
.
查看分组前的结果:
date id_event id_timewindow begin end max_rooms
2014-12-16 1 1 06:00:00 07:00:00 2
2014-12-16 1 2 07:00:00 08:00:00 2
2014-12-16 1 3 08:00:00 09:00:00 2
2014-12-16 2 2 07:00:00 08:00:00 2
2014-12-16 2 3 08:00:00 09:00:00 2
2014-12-16 2 4 09:00:00 10:00:00 2
2014-12-16 3 4 09:00:00 10:00:00 2
2014-12-16 4 6 11:00:00 12:00:00 2
2014-12-16 4 5 10:00:00 11:00:00 2
2014-12-16 5 7 12:00:00 13:00:00 2
2014-12-16 5 8 13:00:00 14:00:00 2
2014-12-16 6 9 14:00:00 15:00:00 2
我使用 GROUP BY id_event
而 id_timewindows
是 group_concat(id_timewindow SEPARATOR ',')
我找到了解决方案:
SELECT
date,
id_timewindow,
max_rooms,
COUNT(concat(date, id_timewindow)) as counter
FROM `timewindows_reserved`
GROUP BY
date, id_timewindow
HAVING counter < max_rooms
这将得到与我想要的相反的结果,我可以使用它。
date id_timewindow max_hits
2014-12-16 1 2
2014-12-16 4 2
2014-12-16 5 2
2014-12-16 6 2
2014-12-16 7 2
2014-12-16 8 2
2014-12-16 9 2
如果我按日期分组并从 id_timewindow
中创建一个列表,那么我可以收到与我想要的相同的结果,但采用逆逻辑。不是预留时间窗,而是空闲时间窗。如果我反转这个然后我可以得到结果:
SELECT
date,
id_event,
GROUP_CONCAT(id_timewindow SEPARATOR ','),
max_rooms,
COUNT(concat(date, id_timewindow)) as counter
FROM `table`
GROUP BY
date, id_timewindow
HAVING counter >= max_rooms