2014-04-01 16 views
6

Chcę wybrać kraje z maksymalną wartością "Wartość" dla "grpid". Również wybrany "Kraj" nie powinien być brany pod uwagę przy innych "grpid" przy sprawdzaniu maksimum. (Tj Kraj lub grpid nie powinny być powtarzane w wyniku)Jak wybrać maks. Wiersz dla każdej grupy w SQL

SQL Fiddle

Wynik:

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

w wyniku Kraj lub konto tpp nie powinny się powtarzać ... w twoim wyniku Powtarzają się "GB" i "US". 1) wybierz kraje o maksymalnej wartości "Wartość" dla "grpid" 2) "grpid" i kraj nie powinien się powtarzać. 3) musimy przyjąć następną wartość maksymalną, jeśli "grpid" nie ma wartości najwyższej. – user3484971

+0

Dlaczego nie obejmują ** 'grpid„50147'' ** – Luv

Odpowiedz

0

Czy możesz wypróbować tę kwerendę

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

dzięki, to przyzwyczajenie praca wyjścia Wynik: Kraj grpid Wartość row_number USA 49707 604456458 1 GB 5086 497654945 4 CA 909 353500201 10 JP 231 198291290 15 w wyniku Kraju lub wydania nie należy powtarzać ... w wynikach "GB" i "USA" się powtarza. 1) wybierz kraje o maksymalnej wartości "Wartość" dla "grpid" 2) "grpid" i kraj nie powinien się powtarzać. 3) musimy przyjąć następną wartość maksymalną, jeśli "grpid" nie ma wartości najwyższej. – user3484971

+0

w wyniku Kraj lub konto tpp nie powinny się powtarzać ... w wynikach "GB" i "USA" się powtarza. 1) wybierz kraje o maksymalnej wartości "Wartość" dla "grpid" 2) "grpid" i kraj nie powinien się powtarzać. 3) musimy przyjąć następną wartość maksymalną, jeśli "grpid" nie ma wartości najwyższej. – user3484971

+0

czy możesz usunąć kraj z grupy przez i wybrać listę i spróbować? – sakthi

1

wypróbuj te zapytania 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

Sprawdziło się idealnie. –

2

Wierzę, że to jest to, czego szukasz:

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 
Powiązane problemy