我有一个SQL Server 2008数据库,我希望能够在一个表上执行以下操作。
该表有多列,根据两列的组合应该是唯一的。 我们将它们称为[ID1]和[ID2],然后有一个键我们称之为[index],一个可以重复的值称为[ID3]和一个名为[start]的日期时间值。
所以这就是困境,在表的范围内,对于每个[ID1]和[ID2]组合,应该只有一个[index]的增加值,这三者组成了来自客户端DB的自然PK。存储在一个统一的服务器数据库中。 ID3表示用于确定行何时存储在客户端数据库中的值,因此服务器中可能存在重复项
[ID1] [ID2] [index] [ID3] [start] [other1] [other2]
1 1 1 1 01/01/2000 01:00:00 5 6
1 1 2 2 01/01/2000 01:00:01 4 2
1 1 3 3 01/01/2000 01:00:02 5 2
1 1 4 3 01/01/2000 01:00:03 5 2
1 1 5 4 01/01/2000 01:00:04 4 6
我想要的是一个返回行,这些行是[ID3]和[other1]&amp;的唯一组合。 [other2]列,[ID1],[ID2]键的唯一列,我希望 first [start]符合该条件,基本上忽略了相同distinct子句的进一步出现。< / p>
从上表中它将返回......
[ID1] [ID2] [index] [ID3] [start] [other1] [other2]
1 1 1 1 01/01/2000 01:00:00 5 6
1 1 2 2 01/01/2000 01:00:01 4 2
1 1 3 3 01/01/2000 01:00:02 5 2
1 1 5 4 01/01/2000 01:00:04 4 6
值为3的[ID3]的第二行将被忽略,其他任何具有[ID3]重复的行
我似乎无法理解的是每个不同组合的第一个值,因为distinct不允许我选择其他列的值,group by需要一些聚合功能
答案 0 :(得分:3)
;with a as
(
SELECT [ID1],[ID2],[index],[ID3],[start],[other1],[other2],
rn = row_number() over (partition by ID1, ID2, ID3 order by start)
FROM yourtable
)
select
[ID1],[ID2],[index],[ID3],[start],[other1],[other2],
from a
where rn = 1