2016-09-06 3 views
1
-------------------------------------------------------------- 
AnimalName AnimalType RowNumber 
--------------------------------------------------------------- 
Chicken   Bird  1 
Duck   Bird  2  
Alpaca   Mammal  1 
Camel   Mammal  2 
Carabao   Mammal  3 
Whale   Sea   1 
Shark   sea   2 
Prawns   Sea   3 
Eel    sea   4 

ВЫВОДНеобходимо выбрать row_number, который является последним

AnimalName  AnimalType RowNumber 
------------------------------------------------------------   
Duck    Bird   2 
Carabao   Mammal  3 
Eel    sea   4 

Запрос:

SELECT t.* from (
select 
    AnimalName, 
    AnimalType, 
    ROW_NUMBER() OVER(PARTITION BY AnimalType ORDER BY AnimalName) AS RowNumber 
FROM Animal A 
) t 
where rownumber=1 

Выше запрос дает мне все 1-RowNumber, если я хочу, чтобы выбрать последний RowNumber то какие изменения я должен сделать. для например: птица макс RowNumber 2, млекопитающее Макс 3 и море Макс 4

ответ

2

Просто используйте DESC вместо ASC для ORDER BY:

SELECT a.* 
FROM (SELECT AnimalName, AnimalType, 
      ROW_NUMBER() OVER (PARTITION BY AnimalType ORDER BY AnimalName DESC) AS RowNumber 
     FROM Animal a 
    ) a 
WHERE rownumber = 1; 

Если вы действительно хотите сохранить номера строк, то используйте, а затем используйте COUNT(*) для сравнения:

SELECT a.AnimalName, a.AnimalType, a.rownumber 
FROM (SELECT AnimalName, AnimalType, 
      ROW_NUMBER() OVER (PARTITION BY AnimalType ORDER BY AnimalName) AS RowNumber, 
      COUNT(*) OVER (PARTITION BY AnimalType) as cnt 
     FROM Animal a 
    ) a 
WHERE rownumber = cnt; 
+0

это работает. Вы потрясающий !!!! Оценил –

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