Я пытаюсь получить самые последние записи со статусом «Зарегистрировано, просрочено», используя значение даты состояния, чтобы получить последнюю.
У меня есть запрос, я использую определенный номер лота, который имеет 13 идентификаторов записей.
SELECT
MAX(STATUS_DATE)
, LOT_NBR
, RECORD_ID
FROM
PERMIT P
INNER JOIN LOT L
ON P.SERV_CODE = L.SERV_CODE
AND P.ID1 = L.ID1
AND P.ID2 = L.ID2
AND P.ID3 = L.ID3
WHERE
L.STATUS IN ('Registered', 'Expired')
AND P.LOT NBR = '070826204235'
GROUP BY
RECORD_ID
, L.LOT_NBR
Я получаю этот список:
STATUS_DATE LOT_NBR RECORD_ID
2018-12-28 10:11:32.887 070826204235 LR2014-00519
2018-12-28 09:53:52.400 070826204235 LR2016-01722
2018-12-28 09:44:52.487 070826204235 LR2016-01737
2018-12-28 09:44:07.440 070826204235 LR2016-01738
2018-12-28 09:43:19.263 070826204235 LR2016-01739
2018-12-28 09:42:39.313 070826204235 LR2016-01742
2018-12-28 09:39:42.513 070826204235 LR2016-01743
2018-12-28 09:38:46.527 070826204235 LR2016-01744
2018-12-28 09:37:57.007 070826204235 LR2016-01745
2018-12-28 09:35:47.300 070826204235 LR2016-01746
2018-12-28 09:34:41.737 070826204235 LR2016-01747
2018-12-28 09:20:30.663 070826204235 LR2016-01754
2018-12-28 09:19:13.900 070826204235 LR2016-01755
Вы можете видеть, что самым последним является тот, что вверху LR2014-00519, основываясь на значении временной части STATUS_DATE.
Затем я добавил еще один MAX вокруг столбца RECORD_ID и ORDER BY STATUS_DATE.
поэтому пересмотренный запрос теперь выглядит так:
SELECT
MAX(RECORD_ID)
, MAX(STATUS_DATE)
, LOT_NBR
FROM
P WITH(NOLOCK)
INNER JOIN LOT L WITH(NOLOCK)
ON P.SERV_CODE = L.SERV_CODE
AND P.ID1 = L.ID1
AND P.ID2 = L.ID2
AND P.ID3 = L.ID3
WHERE
STATUS IN ('Registered', 'Expired')
AND L.LOT_NBR = '070826204235'
GROUP BY
L.LOT_NBR
ORDER BY
STATUS_DATE
Но когда я запускаю его, я получаю сообщение об ошибке:
Column "STATUS_DATE" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause.
Но у меня есть STATUS_DATE в агрегатной функции MAX в SELECT.
Что я делаю не так? Я надеюсь, что кто-то может предложить некоторую помощь, чтобы исправить это.
Спасибо любезно.
SELECT
имя вашего столбцаMAX(STATUS_DATE)
. В вашемORDER BY
этоSTATUS_DATE
. Что вы ожидаете? Как вы ожидаете, что SQL Server узнает, что выSTATUS_DATE
вORDER BY
ссылаетесь наMAX(STATUS_DATE) in
SELECT`? - person Eric   schedule 28.08.2019