我必须处理被转储到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的列表。
答案 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;