2014-10-01 3 views
0

У меня есть таблица с различными компаниями, каждая с количеством заказов, начиная от только 1 к возможному ппервый и последний row_number

я использовал

ROW_NUMBER() OVER (PARTITION BY CompanyName ORDER BY OrderDate) AS Orders 

Это дает мне образец, как ниже

Comp1 1 
Comp2 1 
Comp3 1 
Comp3 2 
Comp3 3 
Comp3 4 
Comp4 1 
Comp4 2 
Comp4 3 

Как мне пройти через таблицу и выбрать первую и последнюю запись для каждой компании? в конечном итоге с:

Comp1 1 
Comp2 1 
Comp3 1 
Comp3 4 
Comp4 1 
Comp4 3 

ответ

3

Вы можете использовать row_number() дважды или count():

select c.* 
from (select c.*, 
      row_number() over (partition by CompanyName order by OrderDate) as seqnum, 
      count(*) over (partition by CompanyName) as cnt 
     from companies c 
    ) c 
where seqnum = 1 or seqnum = cnt; 
0
select * from Orders 
where (CompanyName , OrderDate) in (
    select CompanyName , min(OrderDate) from Orders group by CompanyName 
    union all 
    select CompanyName , max(OrderDate) from Orders group by CompanyName 
) 
Смежные вопросы