У меня есть две таблицы в SQL Server 2008 R2. Одна таблица представляет собой таблицу поиска, содержащую описание службы, а другая таблица содержит историю обслуживания для клиента. Мне нужно написать запрос, чтобы перечислить все типы услуг и когда они были в последний раз использованы. Вот поля в двух таблицах, которые я должен работать с:Запросить две таблицы, чтобы получить список с самой последней датой?
Table1: Code_Service
ULink
Description
Table2: Service_History
ServiceTypeULink
RecordUpdateDateTime
Table1 data:
ULink Description
037dc811-4d56-XXXX-XXXX-XXXXXXXXXc Dental
5589e876-9c48-XXXX-XXXX-XXXXXXXXXd Surgical Procedure
177rt522-2s96-XXXX-XXXX-XXXXXXXXXa Specialty
Table2 data:
ServiceTypeULink RecordUpdateDateTime
037dc811-4d56-XXXX-XXXX-XXXXXXXXXc 10/11/2014 12:38:02 PM
5589e876-9c48-XXXX-XXXX-XXXXXXXXXd 4/21/2013 10:45:28 AM
177rt522-2s96-XXXX-XXXX-XXXXXXXXXa 11/22/2015 11:37:35 AM
Поля ULINK и ServiceTypeULink то, что связывает их. Поэтому мне нужно запросить все «Code_Service.Description», используемые в Service_History, которые имеют самую последнюю «RecordUpdateDateTime». Я написал следующий запрос, и, кажется, работает, но не уверен, что это правильно (или лучше/быстрее) способ сделать это, учитывая, что я на SQL Server 2008.
SELECT
Code_Service.Description
,MAX(Service_History.RecordUpdatedDateTime) AS DateLastUsed
FROM dbo.Service_History
LEFT OUTER JOIN dbo.Code_Service
ON Service_History.ServiceTypeULink = Code_Service.ULink
GROUP BY Code_Service.Description
ORDER BY DateLastUsed DESC
Спасибо
Спасибо большое! Мне нравится, как вы использовали Common Table Expression (CTE), а затем запросили на том, где row_number = 1. Узнали что-то сегодня. Еще раз спасибо. – DataCrypt