选择最近的行,其中2列包含相同的值

时间:2018-10-30 09:03:04

标签: sql sql-server select

我有一张街道代码和县代码表。我只需选择这两列相同的所有行中的最新行(按创建日期排序)。

例如。

enter image description here

这里仅应选择最后一行,因为它具有创建的最新日期,其中Kommunekode和Vejkode相同。

如何过滤我的select语句以允许这种逻辑?我尝试使用distinct关键字,但这没有考虑创建日期。

我当前的视图代码:

SELECT
    Infohub_RowId,
    Infohub_CreatedDate,
    Id,
    Sekvensnummer,
    Tidspunkt,
    Operation,
    Kommunekode,
    Vejkode,
    Oprettet,
    Aendret,
    Navn,
    Vejnavn,
    Navngivenvej_id,
    Aendret AS Infohub_ValidityDate
FROM (
    SELECT
        Infohub_RowId,
        Infohub_CreatedDate,
        Sekvensnummer,
        Tidspunkt,
        Operation,
        Id,
        Kommunekode,
        Vejkode,
        Oprettet,
        Aendret,
        Navn,
        Vejnavn,
        Navngivenvej_id,
        ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Aendret DESC) AS RowNum
    FROM 
        Dawa.tDelta_Vejstykke) AS x
WHERE x.RowNum = 1

视图应通过选择最新的重复记录来“清理”数据。

2 个答案:

答案 0 :(得分:1)

依次使用WITH VTE AS ( SELECT 564843530 AS SomeNumber), Split AS( SELECT V.SomeNumber, NG.token, NG.position FROM VTE V CROSS APPLY dbo.NGrams8k(V.SomeNumber,1) NG) SELECT SomeNumber AS OldNumber,, CONVERT(bigint,(SELECT token + 3 FROM Split x WHERE S.SomeNumber = x.SomeNumber ORDER BY x.position FOR XML PATH(''))) AS NewNumber FROM Split S GROUP BY S.SomeNumber; 和by Infohub_CreatedDate这两个列,分区依据

Kommunekode,Vejkode

答案 1 :(得分:1)

您想要row_number(),但Kommunekode, Vejkode应该在partition子句中:

SELECT t.*
FROM (SELECT t.*,
             ROW_NUMBER() OVER (PARTITION BY Kommunekode, Vejkode ORDER BY Infohub_CreatedDate DESC) AS Seq
      FROM Dawa.tDelta_Vejstykke t
     ) t
WHERE Seq = 1;