2016-03-26 2 views
1

У меня есть таблица для планирования занятий спортом. Я бы хотел найти, когда запланирован двойной заголовок. То есть, две игры для одной и той же команды в тот же день. Вот пример таблицы:Запрос, чтобы найти двойной заголовок

id  event   start_date   end_date   homeid awayid 
3391 team1 vs. team2 2016-04-27 17:00:00 2016-04-27 18:00:00 3  1 
3395 team2 vs. team3 2016-04-27 17:00:00 2016-04-27 18:00:00 5  3 
3396 team1 vs. team3 2016-05-04 17:00:00 2016-05-04 18:00:00 5  1 
3392 team3 vs. team2 2016-05-04 19:40:00 2016-05-04 20:40:00 3  5 
3393 team3 vs. team1 2016-05-11 17:55:00 2016-05-11 18:55:00 1  5 
3394 team2 vs. team1 2016-05-18 17:55:00 2016-05-18 18:55:00 1  3 

Я могу найти дни двойных-заголовков с чем-то вроде:

SELECT * 
FROM events 
GROUP BY DATE_FORMAT(start_date,'%j') 

Но, что мне нужна помощь с заключается в определении, какая команда, используя teamids, которые установлены в столбцах homeid и awayid, имеют двойной заголовок в те дни. Например, мне нужно знать, что 4/27 команда с идентификатором «3» имеет двойной заголовок. На 5/4 это команда из 5.

Я уверен, что ответ прост, но сегодня я борюсь с ним.

Спасибо.

ответ

1

Это сложно. Один из способов использует union all и group by:

select team, day, count(*) as numgames 
from ((select id, homeid as team, date(start_date) as day 
     from t 
    ) union all 
     (select id, awayid as team, date(start_date) 
     from t 
    ) 
    ) t 
group by team, day 
having numgames > 1; 
+0

Я пытался придумать, как это сделать за один проход стола. Этого будет достаточно. :) –

+0

Это прекрасно! Благодаря! –

Смежные вопросы