sql >> Databáze >  >> RDS >> Oracle

Jak počítat po sobě jdoucí duplikáty v tabulce?

To lze provést metodou Tabibitosan. Spusťte toto, abyste tomu porozuměli:

with a as(
select 1 slno, 'A' pg from dual union all
select 2 slno, 'A' pg from dual union all
select 3 slno, 'B' pg from dual union all
select 4 slno, 'A' pg from dual union all
select 5 slno, 'A' pg from dual union all
select 6 slno, 'A' pg from dual 
)
select slno, pg, newgrp, sum(newgrp) over (order by slno) grp
from( 
    select slno, 
           pg, 
           case when pg <> nvl(lag(pg) over (order by slno),1) then 1 else 0 end newgrp
    from a
    );

Newgrp znamená, že byla nalezena nová skupina.

Výsledek:

SLNO PG NEWGRP GRP
1    A  1      1
2    A  0      1
3    B  1      2
4    A  1      3
5    A  0      3
6    A  0      3

Nyní stačí použít skupinu podle s počtem, abyste našli skupinu s maximálním počtem výskytů:

with a as(
select 1 slno, 'A' pg from dual union all
select 2 slno, 'A' pg from dual union all
select 3 slno, 'B' pg from dual union all
select 4 slno, 'A' pg from dual union all
select 5 slno, 'A' pg from dual union all
select 6 slno, 'A' pg from dual 
),
b as(
select slno, pg, newgrp, sum(newgrp) over (order by slno) grp
from( 
    select slno, pg, case when pg <> nvl(lag(pg) over (order by slno),1) then 1 else 0 end newgrp
    from a
    )
)
select max(cnt)
from (
    select grp, count(*) cnt
    from b
    group by grp
    );


  1. Jak sjednotit všechny dotazy SQL-SQLite podle případu?

  2. Možnosti Sniffing, Embedding a RECOMPILE

  3. Domovská stránka Oracle pouze pro čtení

  4. jak zkontrolovat strukturu sloupců v ssis?