需要 select row_number 这是最后一个
Need to select row_number which is last
--------------------------------------------------------------
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
输出
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
以上查询为我提供了所有第一个行号,如果我想 select 最后一个行号,那么我必须进行哪些更改。
例如:鸟类最大行数为 2,哺乳动物最大行数为 3,海洋最大行数为 4
只需使用 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;
--------------------------------------------------------------
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
输出
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
以上查询为我提供了所有第一个行号,如果我想 select 最后一个行号,那么我必须进行哪些更改。 例如:鸟类最大行数为 2,哺乳动物最大行数为 3,海洋最大行数为 4
只需使用 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;