Подзапрос не возвращает ожидаемый результат

0

Я пытаюсь получить 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

матч

|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 и datetime больше, чем в предыдущих сезонах.

  • 0
    Не могли бы вы предоставить пример данных и ожидать результата?
  • 0
    Пожалуйста, предоставьте некоторые данные и ожидаемые результаты. Кроме того, какой тип "сезон" (например, 2017/2018 )?
Показать ещё 1 комментарий
Теги:
pdo

2 ответа

1
Лучший ответ

Я думаю, что ORDER BY и LIMIT будут работать:

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
ORDER BY m.datetime DESC
LIMIT 1;
  • 0
    ваш запрос волшебный
0

Попробуй это:

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(m1.datetime) FROM 'match' m1
                  INNER JOIN competition_rounds r1 
                  ON m1.round_id = r1.id
                  INNER JOIN competition_seasons s1
                  ON r1.season_id = s1.id
                  AND s1.competition_id = 89)
  • 0
    это возвращает тот же результат, который я написал в своем вопросе .. 2011
  • 0
    Вы можете заполнить пример данных для результатов сезонов 2011 года?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню