Почему эти подзапросы работают отдельно, а не при использовании UNION? - PullRequest
0 голосов
/ 12 июня 2019

Оба приведенных ниже запроса работают сами по себе, но не когда они объединены предложением Union. Вместо того, чтобы перечислять самые последние 4 даты и те же 4 даты в прошлом году, он возвращает самые последние 4 даты и затем самые старые 4 даты в таблице.

Запрос 1

SELECT DISTINCT TOP 4 [Week Ending]
FROM [DataFormat]
ORDER BY [Week Ending] DESC;

Запрос 2

SELECT DISTINCT TOP 4 [Week Ending]
FROM [DataFormat]
WHERE [Week Ending] < DateAdd('yyyy',-1,(SELECT MAX([Week Ending]) FROM [DataFormat]))
ORDER BY [Week Ending] DESC;

Это запрос, который не работает:

SELECT DISTINCT TOP 4 [Week Ending]
FROM [DataFormat]
ORDER BY [Week Ending] DESC;
UNION ALL
SELECT DISTINCT TOP 4 [Week Ending]
FROM [DataFormat]
WHERE [Week Ending] < DateAdd('yyyy',-1,(SELECT MAX([Week Ending]) FROM [DataFormat]))
ORDER BY [Week Ending] DESC;

Я хочу столбец с самыми последними n датами и теми же датами 1 год назад.

Ответы [ 2 ]

4 голосов
/ 12 июня 2019

Сохраните два запроса SELECT.Создайте запрос UNION с этими двумя объектами запроса.

SELECT Query1.* FROM Query1
UNION
SELECT Query2.* FROM Query2;

Не собираюсь пытаться понять и объяснить, почему запрос все-в-одном не будет работать.

0 голосов
/ 12 июня 2019

Вместо этого вы можете сделать:

SELECT DISTINCT [Week Ending]
FROM [DataFormat]
WHERE [Week Ending] IN (SELECT DISTINCT TOP 4 [Week Ending]
                        FROM [DataFormat]
                        ORDER BY [Week Ending] DESC
                       ) OR
      [Week Ending] IN (SELECT DISTINCT TOP 4 [Week Ending]
                        FROM [DataFormat]
                        WHERE [Week Ending] < DateAdd('yyyy', -1, (SELECT MAX([Week Ending]) FROM [DataFormat])
                       )
ORDER BY [Week Ending] DESC;

Индекс на [Week Ending] может повысить производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...