Я так понимаю, что я не могу получить MAX() для некоторого псевдонима, который у меня есть в операторе выбора в запросах sql?
Пример:
Select
CASE WHEN CompletionDate IS NOT NULL THEN DATEDIFF(d, CreatedDate, CompletionDate) ELSE NULL END AS DaysLong
from CombinedMastervw
WHERE CreatedDate Between '03/01/2019 23:59:59.991' AND '04/01/2019 23:59:59.991'
ORDER BY MAX(dayslong)
Таким образом, мой вопрос касается MAX(dayslong)
, должен ли я в конечном итоге сделать Max с тем же кодом в выражении SELECT
?
Это действительно не имеет смысла. Вам нужно максимальное значение или вы хотите заказать все строки? Я предполагаю, что вы хотите заказать по убыванию дней (так что сначала самое высокое значение)?
Что вообще означает ORDER BY MAX(dayslong)
?
Мне даже не нужен Макс… я что-то не так делал
Если вы хотите max()
, используйте top (1)
и order by
:
Select TOP (1) DATEDIFF(day, CreatedDate, CompletionDate) DaysLong
from CombinedMastervw
WHERE CreatedDate >= '2019-03-01' AND
CreatedDate < '2019-04-02'
ORDER BY dayslong DESC;
Я изменил сравнения дат, чтобы они были для полных дней. Если вам действительно нужно несколько секунд до полуночи, вы можете вернуться к своей версии.
Хорошо, круто, но если я хочу больше одного результата, то как мне это сделать?
@ЧадДжейкобс. . . Просто уберите TOP (1)
. Использование MAX()
предполагает, что вам нужен один результат.
Вы должны иметь возможность использовать псевдоним.
Пытаться:
ORDER BY dayslong
Max(dayslong) вернет единственное максимальное значение в выбранной вами таблице, поэтому вы не можете упорядочить его.
Образцы данных и желаемые результаты помогут.