sql >> Database >  >> RDS >> Sqlserver

SQL:selecteer de meest recente achtereenvolgens verschillende waarde met groepering

Hmmm. . . Een methode is om de laatste waarde te krijgen. Kies vervolgens alle laatste rijen met die waarde en aggregeer:

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;

Of, zonder de aggregatie:

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);

Maar laten we dit in SQL Server 2008 behandelen als een gaps-and-islands-probleem:

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;

Dit identificeert elk van de groepen met behulp van een verschil in rijnummers. Het berekent het maximale rijnummer voor de groep en het algemeen in de gegevens. Deze zijn hetzelfde voor de laatste groep.




  1. Voorbeeld van een voorbereide INSERT-instructie met ruby ​​pg gem

  2. fe_sendauth:geen wachtwoord opgegeven fout in postgresql + laravel

  3. WordPress Meta Query-arrays

  4. Wat is het meest geschikte gegevenstype voor het opslaan van een IP-adres in de SQL-server?