Tema: Re: SQL
Autorius: 2x50
Data: 2010-04-15 22:39:33
:)
tai jei nera rankyciu, tai nera ir pyrageliu. Jei irasu grupavimui neimanoma 
apibrezti kriteriju, tai, mano galva, irasai is viso neimanoma sugrupuoti 
niekaip, nes nera grupavimo salygos...
Jei rimtai, tai is duotu duomenu galeciau pasakyti, kad sekantis irasas 
priklauso kitai grupei, jei laiko skirtumas yra didesnis nei 3 sekundes.

Idedu ideja kaip galima sugrupuoti irasus tikrinant ankstesne reiksme, gal 
pades. Cia ideja tokia, kad grupuojami visi irasai, kuriu data vienas nuo 
kito skiriasi ne daugiau kaip viena diena

with dummy_tbl as

(

select to_date('20100103', 'yyyymmdd') stamp from dual union all

select to_date('20100104', 'yyyymmdd') from dual union all

select to_date('20100105', 'yyyymmdd') from dual union all

select to_date('20100120', 'yyyymmdd') from dual union all

select to_date('20100121', 'yyyymmdd') from dual union all

select to_date('20100122', 'yyyymmdd') from dual union all

select to_date('20100123', 'yyyymmdd') from dual union all

select to_date('20100201', 'yyyymmdd') from dual union all

select to_date('20100202', 'yyyymmdd') from dual

)

select

q1.stamp,

sum (q1.start_of_group) over (order by q1.stamp) group_id

from

(

select

t.stamp,

lag (t.stamp, 1, t.stamp) over (order by t.stamp) pre_stamp,

t.stamp - lag (t.stamp, 1, t.stamp-11) over (order by t.stamp) stamp_diff,

case when t.stamp - lag (t.stamp, 1, t.stamp-11) over (order by t.stamp) > 1 
then 1 end start_of_group -- cia prasideda nauja grupe

from dummy_tbl t

) q1

toliau kiekvienam group_id gali issitraukti min ir max data ir gausi 
intervalus.