两行数据之间的匹配

时间:2015-01-05 08:27:53

标签: mysql sql match

我想从结果中选择匹配计数,其中匹配计数在日期是精确的int。

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 ',')

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

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创建一个LIST,那么我可以接收与我想要的相同的结果,但是在逆逻辑中。不是保留的时间窗口而是自由时间窗口。如果我反过来,那么我可以得到结果:

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