如何查询表中包含重复项的最新项?

时间:2015-03-21 22:30:17

标签: sql sql-server

我必须处理被转储到SQL Server中的“日志”表的数据。不幸的是无法做出改变。基本上每天都会运行一个进程,它会将一些重复的项目转储到表中。

表1:

import_id: guid
import_at: datetime

表2:

item_id: guid
import_id: guid (foreign key)
item_url: varchar(1000)
item_name: varchar(50)
item_description: varchar(1000)

有时表2会有重复的item_url。我只想从最新的导入中获取item_id和item_url的列表。

1 个答案:

答案 0 :(得分:1)

下面的查询将为每个item_url返回一行,该行具有最新的import_at值:

WITH all_items AS (
    SELECT
          t1.import_id
        , t1.import_at
        , t2.item_id
        , t2.item_url
        , t2.item_name
        , t2.item_description
        , ROW_NUMBER() OVER(PARTITION BY item_url ORDER BY t1.import_at DESC) AS item_url_rank 
    FROM dbo.table1 AS t1
    JOIN dbo.table1 AS t2 ON
        t2.import_id = t1.import_id
    )
SELECT 
          t1.import_id
        , import_at
        , item_id
        , item_url
        , item_name
        , item_description
WHERE 
    item_url_rank = 1;