sql >> Database teknologi >  >> RDS >> Sqlserver

SQL:Vælg Seneste sekventielt distinkt værdi med gruppering

Hmmm. . . En metode er at få den sidste værdi. Vælg derefter alle de sidste rækker med den værdi og aggregér:

select min(rownum), colA, colB
from (select t.*,
             first_value(colA) over (partition by colB order by rownum desc) as last_colA
      from t
     ) t
where rownum > all (select t2.rownum
                    from t t2
                    where t2.colB = t.colB and t2.colA <> t.last_colA
                   )
group by colA, colB;

Eller uden sammenlægningen:

select t.*
from (select t.*,
             first_value(colA) over (partition by colB order by rownum desc) as last_colA,
             lag(colA) over (partition by colB order by rownum) as prev_clA
      from t
     ) t
where rownum > all (select t2.rownum
                    from t t2
                    where t2.colB = t.colB and t2.colA <> t.last_colA
                   ) and
      (prev_colA is null or prev_colA <> colA);

Men i SQL Server 2008, lad os behandle dette som et hul-og-ø-problem:

select t.*
from (select t.*,
             min(rownum) over (partition by colB, colA, (seqnum_b - seqnum_ab) ) as min_rownum_group,
             max(rownum) over (partition by colB, colA, (seqnum_b - seqnum_ab) ) as max_rownum_group
      from (select t.*,
                   row_number() over (partition by colB order by rownum) as seqnum_b,
                   row_number() over (partition by colB, colA order by rownum) as seqnum_ab,
                   max(rownum) over (partition by colB order by rownum) as max_rownum
            from t
           ) t
     ) t
where rownum = min_rownum_group and  -- first row in the group defined by adjacent colA, colB
      max_rownum_group = max_rownum  -- last group for each colB;

Dette identificerer hver af grupperne ved hjælp af en forskel mellem rækkenumre. Den beregner det maksimale antal rækker for gruppen og samlet i dataene. Disse er de samme for den sidste gruppe.




  1. Brug af Substr med Instr til at udtrække en streng i Oracle

  2. Send data til databasen, når du klikker på et link uden sideopdatering

  3. Lagring af enkelte anførselstegn i varchar variabel SQL Server 2008

  4. CAST og IsNumeric