我在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
谢谢
答案 0 :(得分:1)
这样就可以了,但是如果你需要来自任何一个表的更多信息,你也可以使用:
with MyCTE as
(
SELECT
Code_Service.Description
,Service_History.RecordUpdatedDateTime
-- add any other columns needed in here --
,row_number() over (partition by ServiceTypeULink
order by RecordUpdatedDateTime desc) as R_ORD
FROM dbo.Service_History
LEFT OUTER JOIN dbo.Code_Service
ON Service_History.ServiceTypeULink = Code_Service.ULink
)
select *
from MyCTE
where R_ORD = 1