ВЫБЕРИТЕ конкретные записи, когда DISTINCT не сделает это
У меня есть две таблицы:
tbl_Artist
AristID
Name
Info
А также
tbl_Ad
AdID
ArtistID
Venue
DateFrom
DateTo
У артиста может быть несколько объявлений для разных шоу. Я запускаю следующее утверждение, чтобы выбрать артистов в городе в диапазоне дат на основе дат в объявлениях.
SELECT DISTINCT tbl_Artist.Name, tbl_Ad.DateFrom, tbl_Ad.DateTo
FROM tbl_Artist INNER JOIN tbl_Ad ON tbl_Ad.AdID = tbl_Ad.ArtistID
WHERE DateFrom BETWEEN #12/1/2014# AND #12/10/2014#
OR DateTo BETWEEN #12/1/2014# AND #12/10/2014#
OR DateFrom < #12/1/2014# AND DatoTo > #12/10/2014#;
Что дает мне следующий результат:
Artist1 02.12.14 - 10.12.14
Artist2 03.12.13 - 08.12.14
Artist2 03.12.13 - 07.12.14
Дата на одном из шоу заканчивается за день до другого, что заставляет его прийти дважды. Я хочу сделать выбор, который показывает 2 художника на 07.12.14 и 08.12.14, но только один на 10.12.14.
Как мне это решить?
1 ответ
Прежде всего, меня что-то шокирует FROM tbl_Artist INNER JOIN tbl_Ad ON tbl_Ad.AdID = tbl_Ad.ArtistID
предложение объединения должно быть tbl_Ad.ArtistID = tbl_Artist.AristID
Во-вторых, вам нужно видеть, что только 1 строка для шоу артиста имеет 2 разные даты: дата окончания / начала шоу заканчивается в одном и том же диапазоне дат... Я хочу сказать: почему в вашей базе данных у ваших артистов много шоу концы, у которых даты пересекаются? Но я думаю, что это из-за ошибки в предложении соединения. Попробуйте повторить запрос с хорошим соединением.
Если это сохраняется, вы можете использовать MIN()
а также MAX()
Функция, чтобы получить максимальный диапазон дат для найденных объявлений по исполнителю:
SELECT
Name
,MIN(DateFrom)
,MAX(DateTo)
FROM
(SELECT
tbl_Artist.Name
, tbl_Ad.DateFrom
, tbl_Ad.DateTo
FROM
tbl_Artist
INNER JOIN tbl_Ad
ON tbl_Ad.ArtistID = tbl_Artist.AristID
WHERE
DateFrom BETWEEN #12/1/2014# AND #12/10/2014#
OR DateTo BETWEEN #12/1/2014# AND #12/10/2014#
OR DateFrom < #12/1/2014# AND DatoTo > #12/10/2014#)
GROUP BY
Name;