两行数据之间的匹配

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_eventsone 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_eventid_timewindowsgroup_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