sql >> Databasteknik >  >> RDS >> Sqlserver

SQL:Välj Senaste sekventiellt distinkt värde med gruppering

Hmmm . . . En metod är att få det sista värdet. Välj sedan alla de sista raderna med det värdet och sammanställ:

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, utan aggregering:

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, låt oss behandla detta som ett problem med luckor och öar:

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;

Detta identifierar var och en av grupperna med hjälp av en skillnad på radnummer. Den beräknar det maximala antalet rader för gruppen och totalt i data. Dessa är desamma för den sista gruppen.




  1. T-SQL:Hur skapar jag en unik nyckel som är skiftlägeskänslig?

  2. Kan inte ansluta till Oracle DB får fel som java.sql.SQLException:Io undantag:Nätverksadaptern kunde inte upprätta anslutningen

  3. RDSdataService execute_statement returnerar (BadRequestException)

  4. Referensfel på node.js vid inkluderingsfil