Выберите все строки, которые являются первыми вхождения уникальной коллекции столбцов - PullRequest
1 голос
/ 24 марта 2012

У меня есть база данных SQL Server 2008, где я хотел бы иметь возможность выполнять следующие действия для одной таблицы:

В таблице есть несколько столбцов, которые должны быть уникальными на основе комбинации двух столбцов.Мы назовем их [ID1] и [ID2], затем есть ключ, который мы назовем [index], и значение, которое может быть продублировано, с именем [ID3] и значение datetime, называемое [start].

Итак, вот дилемма: в рамках таблицы должно быть только одно увеличивающееся значение [index] для каждой комбинации [ID1] и [ID2], три из которых образуют естественный 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] & [other2], уникальные для ключа [ID1], [ID2], с тем, что я хотел бы first [start], который соответствует этим критериям, по существуигнорируя дальнейшие вхождения этого же отдельного предложения.

Из вышеприведенной таблицы будет возвращено…

[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

Вторая строка с [ID3] значения 3 будет игнорироваться, как если былюбой другой, у которого были дубликаты [ID3]

. Кажется, я не могу понять, что это first значение каждой отдельной комбинации, потому что отличное не позволяет мне выбрать значениедругие столбцы, для группировки по которым потребуется некоторая статистическая функция.

1 Ответ

3 голосов
/ 24 марта 2012
;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
...