2014-04-01 74 views
6

Voglio selezionare i paesi con un valore massimo di 'Valore' per un 'grpid'. Anche già selezionato 'Paese' non dovrebbe essere considerato per altri 'grpid' mentre si controlla il massimo. (Vale a dire Paese o grpid non dovrebbero essere ripetuti nel risultato)Come selezionare una riga max per ogni gruppo in SQL

SQL Fiddle

Risultato:

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-righe-for-each-group-in-sql? forum = Transact-SQL – user3484971

+0

in conseguenza Paese o grpid non dovrebbe essere ripetuto ... in vostro risultato 'GB' e 'US' si stanno ripetendo. 1) Paesi Seleziona con valore massimo di 'Valore' per un 'grpid' 2) 'grpid' & paese non devono essere ripetuti. 3) abbiamo bisogno di prendere il prossimo valore massimo se 'grpid' non c'è un valore per la massima. – user3484971

+0

Perché non si includono ** 'grpid '50147'' ** – Luv

risposta

0

Potete per favore provare questa query

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

grazie, questo voleva uscita lavoro Risultato: Paese grpid Valore ROW_NUMBER US 49707 604.456.458 1 GB 5086 497.654.945 4 CA 909 353.500.201 10 JP 231 198.291.290 15 in conseguenza Paese o grpid non deve essere ripetuto ... nel vostro risultato 'GB' e 'US' sta ripetendo. 1) Paesi Seleziona con valore massimo di 'Valore' per un 'grpid' 2) 'grpid' & paese non devono essere ripetuti. 3) abbiamo bisogno di prendere il prossimo valore massimo se 'grpid' non c'è un valore per la massima. – user3484971

+0

nel risultato Paese o grpid non deve essere ripetuto ... nel risultato 'GB' e 'USA' si stanno ripetendo. 1) Paesi Seleziona con valore massimo di 'Valore' per un 'grpid' 2) 'grpid' & paese non devono essere ripetuti. 3) abbiamo bisogno di prendere il prossimo valore massimo se 'grpid' non c'è un valore per la massima. – user3484971

+0

puoi rimuovere il paese dal gruppo e selezionare la lista e provare? – sakthi

1

prova questa query 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

ha funzionato perfettamente per me. –

2

Credo che questo è ciò che stai cercando:

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 
Problemi correlati