我们有两个表的问题,我们称它们为 Item 和 ItemStatuses。我们跟踪状态的每次更改,因此 ItemStatuses 表中有一个开始日期和结束日期。我们通过查找结束日期为空的状态来跟踪当前状态。
由于系统中的错误,最新状态被多次添加到许多项目中。我需要为每个项目选择除第一个状态之外的所有状态。我有以下查询,它给了我所有的打开状态。我正在尝试这条路线,因为我想我可以使用行号来跳过第一个,但是这些集合中有多个项目,所以我需要跳过每个项目的第一个状态。我想我的查询非常接近,但我不确定我需要做什么。
SELECT ID, rn = ROW_NUMBER() OVER (ORDER BY ItemID)
FROM ItemStatuses WHERE ID IN
(
SELECT
s.ID
FROM Items as i
INNER JOIN ItemStatuses AS s ON
i.ID = s.ItemID AND
s.EndDate IS NULL
GROUP BY i.ID
HAVING COUNT(i.ID) > 1
)