2014-04-01 92 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 
相关问题