2014-04-01 138 views
6

我想要一個'grpid'最大值爲'Value'的國家/地區。在檢查最大值時,已經選擇的'Country'不應該被認爲是其他'grpid'。 (即國家或GRPID不應該在結果重複)如何爲SQL中的每個組選擇一個最大行

SQL Fiddle

結果:

Country grpid  Value   Row_number 

US  49707  604456458   1 
GB  5086   497654945   4 
CA  909   353500201   10 
JP  231   198291290   15 
+0

http://social.msdn.microsoft.com/Forums/en-US/dc8f52e2 -a03d-4183-bf35-dc2ab14f2632/how-to-select-a-max-row-for-each-group-in-sql?forum = transactsql – user3484971

+0

結果國家或結should不應重複...在你的結果中'GB'和'US'正在重複。 1)選擇'價值'最大的國家作爲'粗暴' 2)'粗暴'和國家不應該重複。 3)如果'grpid'不存在最高值,我們需要取下一個最大值。 – user3484971

+0

你爲什麼不包括**'GRPID「50147'' ** – Luv

回答

0

能否請您嘗試此查詢

select 
    country, 
    value, 
    grpid, 
    count(*) 
from test1 
group by 
    country, 
    value, 
    grpid 
order by 
    country, 
    value desc 
+0

感謝,這不會工作,輸出結果: 國家GRPID價值ROW_NUMBER 美國49707 604456458 1 GB 5086 497654945 4 CA 909 353500201 10 JP 231 198291290 15 結果國家或粗暴不應該重複...在你的結果'GB'和'美國'重複。 1)選擇'價值'最大的國家作爲'粗暴' 2)'粗暴'和國家不應該重複。 3)如果'grpid'不存在最高值,我們需要取下一個最大值。 – user3484971

+0

結果國家或粗暴不應該重複......在你的結果'GB'和'美國'重複。 1)選擇'價值'最大的國家作爲'粗暴' 2)'粗暴'和國家不應該重複。 3)如果'grpid'不存在最高值,我們需要取下一個最大值。 – user3484971

+0

你可以從組中刪除國家,並選擇列表並嘗試? – sakthi

1

嘗試此查詢TEAD,

WITH OrderedOrders AS 
    (
    SELECT country,grpid,value,ROW_NUMBER() OVER(PARTITION BY country ORDER BY country,value DESC) AS 'RowNumber' 
    FROM test1 
) 
select * from OrderedOrders 
where RowNumber =1 
+0

爲我完美工作。 –

2

我相信這是你在找什麼:

SQL Fiddle

;with cte as 
(
    select 
     country, 
     max(value) as MaxVal, 
     min(row_number) as MinRow 
    from test1 
    group by Country 
) 
select 
    c.country, 
    t.grpid, 
    c.MaxVal, 
    c.MinRow 
from cte c 
join test1 t 
    on t.country = c.country 
    and t.value = c.MaxVal 
    and t.row_number = c.MinRow 
order by country, grpid 
相關問題