/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408921
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste