|
| MySQL og udtræk af første og sidste row Fra : Søren |
Dato : 26-02-06 17:28 |
|
Hvis jeg har en liste a'la dette:
Time, Val, Status
12:12:12, 1, oppe
12:12:13, 1, oppe
12:12:14, 1, oppe
12:12:15, 0, nede (start)
12:12:16, 0, nede
12:12:17, 0, nede
12:12:18, 0, nede (slut)
12:12:19, 1, oppe
12:12:20, 1, oppe
12:12:21, 1, oppe
12:12:22, 1, oppe
12:12:23, 0, nede (start)
12:12:24, 0, nede
12:12:25, 0, nede
12:12:26, 0, nede (slut)
12:12:27, 1, oppe
12:12:28, 1, oppe
Ud fra hele denne liste, er jeg interesseret i at få dette udtræk:
Time, Val
12:12:15, 0, nede (start)
12:12:18, 0, nede (slut)
12:12:23, 0, nede (start)
12:12:26, 0, nede (slut)
Dvs. første og sidste 0-værdi. Det skal lige siges, at jeg rent faktisk ikke
har "status" feltet med i tabellen, men de er med for at vise logikken. Der
indsættes udelukkende 0- eller 1-taller i tabellen.
Nogen ideer?
| |
Michael Zedeler (26-02-2006)
| Kommentar Fra : Michael Zedeler |
Dato : 26-02-06 17:39 |
|
Søren wrote:
> Hvis jeg har en liste a'la dette:
>
> Time, Val, Status
> 12:12:12, 1, oppe
> 12:12:13, 1, oppe
> 12:12:14, 1, oppe
> [klip]
> 12:12:25, 0, nede
> 12:12:26, 0, nede (slut)
> 12:12:27, 1, oppe
> 12:12:28, 1, oppe
>
> Ud fra hele denne liste, er jeg interesseret i at få dette udtræk:
>
> Time, Val
> 12:12:15, 0, nede (start)
> 12:12:18, 0, nede (slut)
> 12:12:23, 0, nede (start)
> 12:12:26, 0, nede (slut)
>
> Nogen ideer?
Jeg tror det bliver dyrt i køretid i databasen, så jeg ville faktisk
lave det i noget kode udenfor eller som en stored procedure (det kan man
jo i vesion 5).
Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
Visit my home page at http://michael.zedeler.dk/
Get my vcard at http://michael.zedeler.dk/vcard.vcf
| |
Tom Jensen (26-02-2006)
| Kommentar Fra : Tom Jensen |
Dato : 26-02-06 19:34 |
|
Søren skrev:
> Hvis jeg har en liste a'la dette:
>
> Time, Val, Status
> 12:12:14, 1, oppe
> 12:12:15, 0, nede (start)
> 12:12:18, 0, nede (slut)
> 12:12:22, 1, oppe
> 12:12:23, 0, nede (start)
> 12:12:26, 0, nede (slut)
> 12:12:27, 1, oppe
> Ud fra hele denne liste, er jeg interesseret i at få dette udtræk:
>
> Time, Val
> 12:12:15, 0, nede (start)
> 12:12:18, 0, nede (slut)
> 12:12:23, 0, nede (start)
> 12:12:26, 0, nede (slut)
>
> Dvs. første og sidste 0-værdi. Det skal lige siges, at jeg rent faktisk ikke
> har "status" feltet med i tabellen, men de er med for at vise logikken. Der
> indsættes udelukkende 0- eller 1-taller i tabellen.
>
> Nogen ideer?
>
>
Det kan gøres ved at gennemløbe recordsettet og lave en
markering hvergang Val ændrer værdi.
Det betyder at der skal skrives kode og hvordan den skal være
afhænger hvad du bruger som frontend ??
Med venlig hilsen
Tom Jensen
- Læs mere om asp og databaser her -
www.ffsoft.dk
| |
Søren (26-02-2006)
| Kommentar Fra : Søren |
Dato : 26-02-06 23:07 |
|
>> Dvs. første og sidste 0-værdi. Det skal lige siges, at jeg rent faktisk
>> ikke har "status" feltet med i tabellen, men de er med for at vise
>> logikken. Der indsættes udelukkende 0- eller 1-taller i tabellen.
>> Nogen ideer?
>>
> Det kan gøres ved at gennemløbe recordsettet og lave en
> markering hvergang Val ændrer værdi.
> Det betyder at der skal skrives kode og hvordan den skal være
> afhænger hvad du bruger som frontend ??
Jeg bruger PHP og det var selvfølgelig en mulighed, at gøre det dér. Det vil
jeg kigge videre på.
| |
Kristian Damm Jensen (26-02-2006)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 26-02-06 22:09 |
|
Søren wrote:
> Hvis jeg har en liste a'la dette:
>
> Time, Val, Status
> 12:12:12, 1, oppe
> 12:12:13, 1, oppe
> 12:12:14, 1, oppe
> 12:12:15, 0, nede (start)
> 12:12:16, 0, nede
> 12:12:17, 0, nede
> 12:12:18, 0, nede (slut)
> 12:12:19, 1, oppe
> 12:12:20, 1, oppe
> 12:12:21, 1, oppe
> 12:12:22, 1, oppe
> 12:12:23, 0, nede (start)
> 12:12:24, 0, nede
> 12:12:25, 0, nede
> 12:12:26, 0, nede (slut)
> 12:12:27, 1, oppe
> 12:12:28, 1, oppe
>
> Ud fra hele denne liste, er jeg interesseret i at få dette udtræk:
>
> Time, Val
> 12:12:15, 0, nede (start)
> 12:12:18, 0, nede (slut)
> 12:12:23, 0, nede (start)
> 12:12:26, 0, nede (slut)
>
> Dvs. første og sidste 0-værdi. Det skal lige siges, at jeg rent
> faktisk ikke har "status" feltet med i tabellen, men de er med for at
> vise logikken. Der indsættes udelukkende 0- eller 1-taller i tabellen.
>
> Nogen ideer?
Lad mig prøve at få præciseret, hvad du ønsker. Du har en serie værdier, der
kan deles op i forløb med ens Val-værdi.
12:12:12, 1
12:12:13, 1
12:12:14, 1
er således ét forløb, medens
12:12:15, 0
12:12:16, 0
12:12:17, 0
12:12:18, 0
er et andet.
Hvad du ønsker er, for hvert forløb med værdien 0 at få den første og sidste
post.
Er det korrekt opfattet?
Det ser ud til fra dine data, at "Time" altid vil være fortløbende i spring
på et sekund. Kan man forudsætte at det holder stik?
Hvis det er tilfældet, kan man relativt simpelt finde start og slutværdierne
i et forløb:
select Time, val, "start" -- første i et forløb
from Data d1
where da.val = 0
-- den foregående må ikke være 0
and not exists
(select * from Data d2
where d1.Time = d2.time + 1 sekund
and d2.val = 0)
union
select Time, val, "slut" -- sidste i et forløb
from Data d1
where da.val = 0
-- den efterfølgende må ikke være 0
and not exists
(select * from Data d2
where d1.Time = d2.time - 1 sekund
and d2.val = 0)
order by Time
Der skal evt. så laves lidt justeringer for at håndere midnat.
Bemærk, at denne kode også virker for første og sidste forløb i tabellen,
samt for forløb med kun én post.
--
Kristian Damm Jensen
| |
|
|