簡體   English   中英

SQL按列最高值選擇不同的行

[英]Sql select distinct row by a columns highest value

我在嘗試為每個城市名稱選擇一行時遇到問題。 這是我得到的以下收藏:

在此處輸入圖片說明

到目前為止,這是我的查詢:

select pl.PlaceId,
       pl.Name,
       pop.NumberOfPeople,
       pop.Year
from dbo.Places pl
inner join dbo.Populations pop
    on pop.PlaceId = pl.PlaceId
where pop.NumberOfPeople >= 1000
and pop.NumberOfPeople <= 99999

我正在嘗試使其僅選擇一次城市,但使用最近的日期。 因此,在上圖中,我只會看到2016年而不是2015年的Abbeville。我相信我需要對group by或子查詢進行平整。 如果有人對我的處理方法有任何建議,將不勝感激。

假設您正在使用SQLSERVER,則可以使用行號

;with cte
as
(select pl.PlaceId,
       pl.Name,
       pop.NumberOfPeople,
       pop.Year,
row_number() over(partition by pl.Name order by year desc) as rownum
from dbo.Places pl
inner join dbo.Populations pop
    on pop.PlaceId = pl.PlaceId
where pop.NumberOfPeople >= 1000
and pop.NumberOfPeople <= 99999
)
select * from cte where rownum=1

以下查詢用於此目的。

CREATE TABLE #TEMP_TEST
(
PlaceId INT,
Name VARCHAR(50),
NumberOfPeople INT,
YEAR INT
)

INSERT INTO #TEMP_TEST 
SELECT 1,'Abbeville',2603,2016
UNION
SELECT 5,'Alabester',32948,2016
UNION
SELECT 9,'Aubum',63118,2016
UNION
SELECT 1,'Abbeville',2402,2015
UNION
SELECT 5,'Alabester',67902,2017



SELECT PlaceId, Name, NumberOfPeople, YEAR  FROM
 (
   SELECT ROW_NUMBER() OVER (PARTITION BY PlaceId ORDER BY YEAR DESC) RNO, 
          PlaceId, Name, NumberOfPeople, YEAR 
   FROM #TEMP_TEST
 )T
WHERE RNO = 1

DROP TABLE  #TEMP_TEST

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM