Tema: Re: SQL
Autorius: Medžiotojas
Data: 2010-04-15 21:50:11
Paieškojus internete "Find sequence gaps using Oracle" randamas sprendimas:

SELECT before_gap, after_gap
  FROM
    (SELECT 
       data after_gap,
       LAG(data, 1, <default value>) OVER (ORDER BY data) before_gap
     FROM lenta
    )
  WHERE before_gap > <default value> 
    AND after_gap - before_gap > 1
  ORDER BY before_gap;

lenta - lentelės pavadinimas, data - datos stulpelio.
Esminė sąlyga - "after_gap - before_gap > 1" - turi palyginti datas, todėl ją reikia pakeisti taip, kad surastų datas, besiskiriančias daugiau negu kažkiek, kuomet jau bus laikoma, kad tai naujo matavimo pradžia.
<default value> - tiesiog kažkokia konkreti sena data, ankstesnė už visas datas lentelėje.

Neišbandžiau, nėra Oracle po ranka.


"2x50" <a@a.a> wrote in message news:hq79nb$c52$1@trimpas.omnitel.net...
> Jei toks teiginys teisingas "sekantis irasas priklauso kitai grupei, kai 
> laiko skirtumas palyginus su siuo irasu yra didesnis kaip X", tai irgi 
> tinka. Tada visai imanoma, kad galima butu panaudoti oracle navarotus 
> rezultatui isgauti....
> 
> "Jornada Del Muerto" <ask@me.email> wrote in message 
> news:hq79gq$bvd$1@trimpas.omnitel.net...
>> Matei kad jis tik datu seka turi, tai cia galima bet koki rezultata gauti 
>> :), data tada turetu turet koki tai sifruota pozymi, pvz neporine minute 
>> rasoma sesijos pradzia o porine minute sesijos pabaiga :) kitaip cia 
>> neisivaizduoju varianto dar kazkokio
>>
>>> Ar galiu pasitikslinti
>>> Ar yra patikimas kriterijus, pagal kuri galima butu nustatyti, kad 
>>> sekantis
>>> (arba ankstesnis) irasas surusiuotame uzklausos rezultate nebepriklauso 
>>> tai
>>> paciai irasu grupei?
>>>
>>> "NicMC" <easy@freemail.lt> wrote in message
>>> news:hq6b9g$ur9$1@trimpas.omnitel.net...
>>>> Sveiki,
>>>>
>>>> Yra lenta:
>>>>
>>>>
>>>> +----------------------+
>>>> | 20010-01-01 12:35:42 |
>>>> +----------------------+
>>>> | 20010-01-01 12:35:45 |
>>>> +----------------------+
>>>> | 20010-01-18 10:02:02 |
>>>> +----------------------+
>>>> | 20010-01-18 10:02:05 |
>>>> +----------------------+
>>>> | 20010-01-18 10:02:08 |
>>>> +----------------------+
>>>> | 20010-02-13 12:35:42 |
>>>> +----------------------+
>>>> | 20010-02-13 12:35:48 |
>>>> +----------------------+
>>>>
>>>> t.y. tiesiog paprasti datetime. Įrašai eina grupėmis, t.y. tai nėra
>>>> nuolatos pildoma lentelė. Tarpai tarp grupių - nuo minučių iki dienų.
>>>> Reikia gauti laikus kada yra įrašai. Bet ne visus laikus, o kiekvienos
>>>> grupės pradžią ir pabaigą. Nu, arba vidurį. T.y. šitoj konkrečioj lentoj
>>>> priimtinas atsakymas būtų:
>>>>
>>>> +----------------------+----------------------+
>>>> | 20010-01-01 12:35:42 | 20010-01-01 12:35:45 |
>>>> +----------------------+----------------------+
>>>> | 20010-01-18 10:02:02 | 20010-01-18 10:02:08 |
>>>> +----------------------+----------------------+
>>>> | 20010-02-13 12:35:42 | 20010-02-13 12:35:48 |
>>>> +----------------------+----------------------+
>>>>
>>>> arba laikai viduryje intervalų:
>>>> +----------------------+
>>>> | 20010-01-01 12:35:44 |
>>>> +----------------------+
>>>> | 20010-01-18 10:02:05 |
>>>> +----------------------+
>>>> | 20010-02-13 12:35:45 |
>>>> +----------------------+
>>>>
>>>> arba intervalų pradžios:
>>>> +----------------------+
>>>> | 20010-01-01 12:35:42 |
>>>> +----------------------+
>>>> | 20010-01-18 10:02:02 |
>>>> +----------------------+
>>>> | 20010-02-13 12:35:42 |
>>>> +----------------------+
>>>>
>>>> vienžo belekas, kas leistų atskirti kada gi buvo sudėlioti tie įrašai.
>>>> Selektint visus laikus ir analizuot galimybės nėra - įrašų milijonai.
>>>> Selectinant grupuot nesigauna, nes laikai skiriasi.
>>>>
>>>> Šiuo metu datetime yra floatinamas, kažkiek apvalinamas, vėl atgal į
>>>> datetime ir grupuojama. Problema - trūksta tikslumo.
>>>>
>>>> Jei kažką keičia, db - oracle.
>>>>
>>>> Ačiū bent jau perskaičiusiems iki galo :)
>>>
>>> 
> 
>