Tutorial SQL

Przykłady, tutorial, gotowe rozwiązania sql.

Kategoria: SQL Server


Rekordy z maksymalnymi wartościmi w grupie


Rekordy z maksymalnymi wartościmi w grupie



W jaki sposób wybrać rekordy z maksymalną wartością w grupie? To dość proste i jest kilka możliwości, możemy użyć max, row_number(), OUTER APPLY. Jak łatwo zauważycie w zależności od tego jakimi indexami na tabeli dysponujemy zapytania okażą się być bardziej lub mniej efektywne. Z moich obserwacji najszybsze było 1 i 3 zapytanie. Tymczasem 2 ze względu na kosztowny sort było najwolniejsze.

with randowvalues

    as(

       select 1 id, CAST(RAND(CHECKSUM(NEWID()))*1000000 as int) randomnumber, 1 br

          --select 1 id, RAND(CHECKSUM(NEWID()))*100 randomnumber

        union  all

        select id + 1, CAST(RAND(CHECKSUM(NEWID()))*1000000 as int)  randomnumber, CAST(RAND(CHECKSUM(NEWID()))*10 as int) br

             --select id + 1, RAND(CHECKSUM(NEWID()))*100  randomnumber

        from randowvalues

        where

          id < 10000000

      )

 

 

    select *

       into test

    from randowvalues

    OPTION(MAXRECURSION 0)

-- drop table test

--DBCC DROPCLEANBUFFERS

--drop index ix on test

create clustered index pk on test (br,id)

--set  statistics time on

 
select a.br, b.id

 from

 test a

 inner join

 (select max(id) id, br from test group by br) b on a.br = b.br and a.id = b.id


  select *

from

 (select row_number() over(partition by br order by id desc) lp, id, br from test ) b where lp=1

  

select a.br, b.id

from

 (select distinct br from test) a outer apply (

select top 1 id

from test b

where

a.br = b.br 

 order by id desc

) b

powrót















Szkolenia T-SQL, SSIS, Reporting Services, Power BI przez Skype

napisz mariuszhk@op.pl

Książki

Copyright 2010-2011mariuszhk@op.pl

obob ob

Valid HTML 4.01 Transitional

Strona internetowa wykorzystuje pliki cookie zapisywane w pamięci przeglądarki internetowej.

OK