#tsql #max
#tsql #макс
Вопрос:
Я пытаюсь получить выделенный результат только по последней дате. Я впервые задаю здесь вопрос, поэтому заранее приношу извинения, если это непонятно. Спасибо
Используя следующий запрос
SELECT
MAX(A.Insp_Date) AS Last_Insp_Date
,A.Doc_ID
,A.Service_Call_ID
,A.Customer_ID
,A.Address_Code
,A.State
,A.Branch
,B.HydLoc
,B.FlwOutSz
,B.StaticPSI
,B.ResidualPSI
,B.PititPSI
,B.FlwGPM
FROM [dbo].[fofHydrntInspHdr] AS A
LEFT OUTER JOIN [dbo].[fofHYD2800FlwTstRT] AS B
ON A.Doc_ID = B.Doc_ID
WHERE A.Doc_ID > 0
AND A.Address_Code = 'GEN0021'
GROUP BY
A.Doc_ID
,A.Service_Call_ID
,A.Customer_ID
,A.Address_Code
,A.State
,A.Branch
,B.HydLoc
,B.FlwOutSz
,B.StaticPSI
,B.ResidualPSI
,B.PititPSI
,B.FlwGPM
Я также пробовал использовать max doc_id, и это все еще не работает. Ценю любую помощь.
Ответ №1:
Другой вариант, который не должен требовать двух сканирований вашей таблицы, — это отфильтровать последнюю версию с помощью функции window:
with r as
(
SELECT
A.Insp_Date AS Last_Insp_Date
,A.Doc_ID
,A.Service_Call_ID
,A.Customer_ID
,A.Address_Code
,A.State
,A.Branch
,B.HydLoc
,B.FlwOutSz
,B.StaticPSI
,B.ResidualPSI
,B.PititPSI
,B.FlwGPM
,DENSE_RANK() OVER (ORDER BY A.Insp_Date DESC) AS r
FROM [dbo].[fofHydrntInspHdr] AS A
LEFT OUTER JOIN [dbo].[fofHYD2800FlwTstRT] AS B
ON A.Doc_ID = B.Doc_ID
WHERE A.Doc_ID > 0
AND A.Address_Code = 'GEN0021'
)
SELECT
Insp_Date AS Last_Insp_Date
,Doc_ID
,Service_Call_ID
,Customer_ID
,Address_Code
,State
,Branch
,HydLoc
,FlwOutSz
,StaticPSI
,ResidualPSI
,PititPSI
,FlwGPM
FROM r
WHERE r = 1;
Кроме того, я бы посоветовал не переименовывать ваши таблицы с помощью A
, B
C
и т.д., Поскольку они не относятся к таблице и затрудняют понимание запроса позже. В этом случае псевдонимы типа h
и ft
будут передавать, что одна таблица — это заголовки, а другая — тесты потока, одновременно уменьшая количество символов.
Также похоже, что в ваших результатах происходит какое-то плохое дублирование, что говорит о том, что либо ваш запрос не объединяется и не фильтруется надлежащим образом, либо ваши данные неаккуратны.
Комментарии:
1. Спасибо за ответ, это фактически вернуло не выделенные результаты точно так, как показано на изображении выше. Дублирование является результатом изменений данных, которые вы видите в правых столбцах, и да, это беспорядочно, но, к сожалению, эти данные генерируются реальными людьми.
2. О, прошу прощения, вам просто нужно добавить
desc
к порядку сортировки вdense_rank
. Я обновил это выше.3. И что касается дублирования, вы заметите, что первые 8 строк в вашем примере вопроса на самом деле являются теми же 4 продублированными строками. Это говорит о том, что либо данные находятся в таблице скоростей потока дважды (должны быть очищены), либо вам не хватает
join
критериев.