2013-04-01 7 views
1

У меня есть следующая таблицаВыберите строки с уникальным атрибутом

ind_id  name     value  date 
----------- -------------------- ----------- ---------- 
1   a     10   2010-01-01 
1   a     20   2010-01-02 
1   a     30   2010-01-03 
2   b     40   2010-01-01 
2   b     50   2010-01-02 
2   b     60   2010-01-03 
2   b     70   2010-01-04 
3   c     80   2010-01-01 
3   c     90   2010-01-02 
3   c     100   2010-01-03 
3   c     110   2010-01-04 
3   c     120   2010-01-05 
4   d     130   2010-01-05 

Как выбрать строки с уникальным ind_id атрибутом? Независимо от того, какие строки определенно будут для каждого ind_id. Мне нужно 4 строки в результирующем наборе. Я использую SQL Server 2008. Благодаря

ответ

4

Для этого необходимо использовать окно функцию:

select ind_id, name, value, date 
from (select t.*, row_number() over (partition by ind_id order by (select NULL)) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

Если вы хотите только те, которые появляются один раз, а затем использовать:

select ind_id, name, value, date 
from (select t.*, count(*) over (partition by ind_id) as NumInds 
     from t 
    ) t 
where numInds = 1 
+0

Спасибо , первый - это то, что мне нужно! –

+0

Я бы надеялся, что у ОП есть способ определить, какую строку он хочет (последняя дата, наибольшее значение и т. Д.). Он может быть добавлен в часть «ORDER BY», поэтому возвращаются «правильные» строки. –

+1

@TimofeiDavydik. , , Пожалуйста. Второй - там, потому что я изначально неправильно понял вопрос, поэтому я его оставил. –

Смежные вопросы