Я пытаюсь получить season.id
с максимальной датой для match
.
Запрос такой:
SELECT s.id AS season_id,
s.name AS season_name,
s.competition_id AS competition_id
FROM competition_seasons s
INNER JOIN competition_rounds r ON r.season_id = s.id
INNER JOIN `match` m ON m.round_id = r.id
WHERE s.competition_id = 89
AND m.datetime = (SELECT MAX(m.datetime) FROM `match` m WHERE m.round_id = r.id)
GROUP BY s.id
Как вы можете видеть, у меня есть таблица с именем competition_seasons
, которая содержит все сезоны, доступные для соревнования, на этой таблице я получаю всю информацию о соревновании, в этом случае соревнование имеет идентификатор 89
.
Позже я получаю все rounds
, доступные для сезона соревнований, за столом competition_rounds
, match
играется на round
, поэтому я использую INNER JOIN
на столе match
, потому что мне нужно получите только rounds
, которые имеют matches
.
Соревнования 89
имеют разный сезон с разными турами, сезон, например:
- 2017/2018
- 2016/2017
- 2015/2016
запрос должен вернуть 2017/2018
, потому что в последнем сезоне, когда match
с MAX(m.datetime)
в этом поле указывают, когда идет матч, match
, сыгранный в сезоне 2017/2018
, означает, что дата, которая может начинаться с 2017 года и заканчиваться 2018 годом (т.е. в течение двух лет сезона).
Вместо этого результат запроса - 2011, что абсолютно бессмысленно.
Что я сделал не так в запросе?
competition_seasons
| id | name | competition_id
1 2017/2018 89
2 2016/2017 89
3 2015/2016 89
competition_rounds
| id | name | season_id
1 First 1
2 Second 1
3 First 2
4 Second 2
5 First 3
1046 * Матч *
|id | datetime | round_id
1 2018-03-08 00:00:0 1
2 2017-09-10 20:30:0 1
3 2017-04-18 15:30:0 3
4 2016-03-08 00:00:0 3
5 2015-04-08 00:00:0 4
6 2015-05-08 00:00:0 5
ожидаемый результат: season_id = 1, потому что match
этого сезона имеет поле datetime
больше, чем в предыдущих сезонах.