2014-04-01 10 views
6

Ich möchte Länder mit dem maximalen Wert von 'Value' für ein 'Grpid' auswählen. Auch das bereits ausgewählte "Land" sollte bei der Überprüfung des Maximums nicht für andere "grpid" berücksichtigt werden. (Dh Land oder grpid sollte im Ergebnis nicht wiederholt werden)So wählen Sie eine maximale Zeile für jede Gruppe in SQL

SQL Fiddle

Ergebnis:

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-Zeile-für-jede-Gruppe-in-sql? Forum = transactsql – user3484971

+0

im Ergebnis Land oder Grpid sollte nicht wiederholt werden ... in Ihrem Ergebnis "GB" und "US" wiederholen sich. 1) Länder mit maximalem Wert 'Wert' für einen 'Grpid' auswählen 2) 'Grpid' & Land sollte nicht wiederholt werden. 3) Wir müssen den nächsten Maximalwert nehmen, wenn 'grpid' nicht da ist für den höchsten Wert. – user3484971

+0

Warum hast du nicht enthalten ** 'grpid‚50147'' ** – Luv

Antwort

0

Können Sie bitte versuchen, diese Abfrage

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

Danke, das wird nicht funktionieren Ausgang Ergebnis: Land GRPID Wert ROW_NUMBER US 49707 604456458 1 GB 5086 497654945 4 CA 909 353500201 10 JP 231 198291290 15 im Ergebnis Land oder Grpid sollte nicht wiederholt werden ... in Ihrem Ergebnis wiederholen sich 'GB' und 'US'. 1) Länder mit maximalem Wert 'Wert' für einen 'Grpid' auswählen 2) 'Grpid' & Land sollte nicht wiederholt werden. 3) Wir müssen den nächsten Maximalwert nehmen, wenn 'grpid' nicht da ist für den höchsten Wert. – user3484971

+0

im Ergebnis Land oder Grpid sollten nicht wiederholt werden ... in Ihrem Ergebnis wiederholen sich 'GB' und 'US'. 1) Länder mit maximalem Wert 'Wert' für einen 'Grpid' auswählen 2) 'Grpid' & Land sollte nicht wiederholt werden. 3) Wir müssen den nächsten Maximalwert nehmen, wenn 'grpid' nicht da ist für den höchsten Wert. – user3484971

+0

können Sie bitte das Land aus der Gruppe entfernen und Liste auswählen und versuchen? – sakthi

1

versuchen Sie diese Abfrage ins 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

Arbeitete perfekt für mich. –

2

ich das glauben, ist das, was Sie suchen:

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 
Verwandte Themen