查询两个表以获取最近日期的列表?

时间:2017-01-27 15:13:46

标签: sql sql-server database tsql sql-server-2008-r2

我在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

谢谢

1 个答案:

答案 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
相关问题