按最近的数据过滤重复记录?

时间:2015-03-03 12:23:20

标签: sql-server

背景

我在表中有多条记录,除了创建记录的数据外,有时会有重复的条目。

我必须在重复记录之间进行选择并更改具有最新日期的一个字段(最后一个要创建的字段)。

目前我通过目视检查日期手动完成此操作。

问题

这是一种只能带回其中一个副本的方式,即今天最接近的那个副本吗?

实施例

下面是一个查询,它为一个stationID带回两组重复项。每种评估类型应该只有一条记录。对于底部的两条记录,isLive列将更改为True,因为它们具有最新的Filedate记录。

SQL

SELECT StationFileID
      ,StationID
      ,AssessmentType
      ,URL
      ,FileDate
      ,isLive
      ,StationObjectID
FROM StationFiles
WHERE StationID = '1066'
ORDER BY StationID;

返回的记录

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用ROW_NUMBER()功能识别最新的行:

SELECT *
      ,CASE WHEN N = 1 THEN 'True'
                       ELSE 'False' END AS isLive
FROM (SELECT StationFileID
            ,StationID
            ,AssessmentType
            ,FileDate
            ,ROW_NUMBER() OVER (PARTITION BY StationID, AssessmentType ORDER BY FileDate DESC) AS N
FROM StationFiles
WHERE StationID = '1066') AS T