Как выбрать одну из двух таблиц: ближайшую временную метку и порядок по указанной временной метке? - PullRequest
2 голосов
/ 12 февраля 2011

Мой текущий запрос:

SELECT Series.*, Episodes.* FROM Series, Episodes
WHERE EpisodeAirDate > '.time().' AND Episodes.SeriesKey = Series.SerieID
GROUP BY Series.SerieTitle ORDER BY Episodes.EpisodeAirDate;

Я хочу получить информацию из эпизодов, где Episodes.EpisodeAirDate является ближайшим к текущему времени (time ()). С этим я просто получаю последний эпизод в базе данных.

Я пробовал с

SELECT Series.*, Episodes.*, MIN(Episodes.EpisodeAirDate) AS EpisodeAirDate FROM Series, Episodes
WHERE EpisodeAirDate > '.time().' AND Episodes.SeriesKey = Series.SerieID
GROUP BY Series.SerieTitle ORDER BY EpisodeAirDate;

, который работает, но Episode.EpisodeTitle и т. Д. Не соответствует строке метки времени.

Здесь я использую запрос MIN () (http://grab.by/8UNY). Мне не разрешили опубликовать изображение, поэтому, возможно, будет достаточно ссылки:)

Как видите, SerieTitle и «Время до» верны, но EpisodeTitle, EpNo и SeasonNo соответствуют первому запросу.

Трудно объяснить, правда. Я надеюсь, что вы понимаете это! :)

1 Ответ

1 голос
/ 12 февраля 2011

Пожалуйста, попробуйте это:

SELECT S.*,E.* FROM Series S
JOIN (SELECT SeriesKey, MIN(EpisodeAirDate) MinDate FROM Episodes
    WHERE EpisodeAirDate > NOW() GROUP BY SeriesKey) M
    ON M.SeriesKey = S.SerieID
JOIN Episodes E ON E.SeriesKey = S.SerieID AND E.EpisodeAirDate = M.MinDate
ORDER BY E.EpisodeAirDate;

Редактировать: Добавлено предложение ORDER BY.

...