Osaakohan joku auttaa minua seuraavanlaisessa SQL kyselyssä: Minulla on tämän näköinen taulukko:
Laite IP Vika alkoi Vika loppui
112 11.6 10:10 11.6 10:23
112 11.6 10:25 11.6 10:45
.. .. ..
233 13.6 23:13 14.6 00:05
Tästä taulukosta haluaisin yhdistää kaikki alle 10min päästä ensimmäisen loppumisesta seuraavan alkamiseen tapahtuneet viat samaksi ja laskea samalla niiden kpl määrä. Eli kyselyni tulisi näyttää tältä:
Laite IP Vika Alkoi Vika loppui Kpl
112 11.6 10:10 11.6 10:45 2
233 13.6 23:13 14.6 00:05 1
... .. ..
Taulukko johon suoritan kyselyä on linkitetty joten siihen ei voi lisätä laskuria. Olen yrittänyt kaikenlaista mutta kyselystä tulee erittäin hidas (taulussani 25000 riviä). Onkos kellään vinkkejä miten tehdä kysely yksinkertaisesti.
Laite IP Vika alkoi Vika loppui
112 11.6 10:10 11.6 10:23
112 11.6 10:25 11.6 10:45
.. .. ..
233 13.6 23:13 14.6 00:05
Tästä taulukosta haluaisin yhdistää kaikki alle 10min päästä ensimmäisen loppumisesta seuraavan alkamiseen tapahtuneet viat samaksi ja laskea samalla niiden kpl määrä. Eli kyselyni tulisi näyttää tältä:
Laite IP Vika Alkoi Vika loppui Kpl
112 11.6 10:10 11.6 10:45 2
233 13.6 23:13 14.6 00:05 1
... .. ..
Taulukko johon suoritan kyselyä on linkitetty joten siihen ei voi lisätä laskuria. Olen yrittänyt kaikenlaista mutta kyselystä tulee erittäin hidas (taulussani 25000 riviä). Onkos kellään vinkkejä miten tehdä kysely yksinkertaisesti.
Vastaukset 1
Vanhimmat
Menisiköhän jotenkin seuraavasti tai edes seuraavanlaisella idealla:
select laite, min(alkoi), max(loppui), count(*)
from taulu
group by laite
having loppui-alkoi < cast('00:10') as time;
Siis ryhmitellään laitteen mukaan, ja näiden ryhmien sisällä vielä jollakin tavalla otetaan ne joiden kaikkien rivien lopun ja alun välissä on max 10 minuuttia. Luultavasti ei mene tällä tavalla (ainakin esimerkkisi 233-laitteen rivistä ei tulisi tulokseen mitään riviä), mutta ehkä saat jatkoideaa kehittelyyn tästä. :)