25. april 2010 - 11:13Der er
7 kommentarer og 1 løsning
SELECT UNTIL
Hej
mysql 5.1 og php 5.x
Jeg sidder og laver en opgave, hvor jeg skal hente data i en mysql db. Opgaven går ud på at gå tilbage fra en given dato hvor en kondition er opfyldt til den næste dato hvor konditionen er opfyldt.
Jeg tænker noget i stil med SELECT * FROM tabel WHERE kondition = '0' UNTIL kondition > '0'
jeg sætter konditionen til 1, hvis den er opfyldt og 0 hvis ikke. Jeg skal lægge nogle tider sammen mellem de to datoer, der skal findes og det skal så præsenteres som et samlet resultat.
Det handler om en pumpe, der skiftes når den går i stykker. Jeg skal så lave en udregning af hvor mange timer den enkelte pumpe er i drift.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Jeg er langtfra sikker paa at denne opgave loeses bedst i SQL, men hvis den skal saa tror jeg at du leder efter noget a la:
SELECT t1.tid,t2.tid FROM dintabel t1, dintabel t2 WHERE t1.condition=x AND t2.condition=x AND t2.id=t1.id AND t2.tid = (SELECT MIN(t3.tid) FROM dintabel t3 WHERE t3.id=t1.id AND t3.tid > t1.tid AND t3.condition=x)
Som nævnt i mit spørgsmål handler det om at holde øje med driftstid mellem to pumpeskift.
Da der kan optræde mere end et skift i databasen er jeg kun interesseret i den seneste driftstid mellem de seneste to skift.
Derfor vil jeg gerne have en løsning, hvor jeg søger i db efter rækker med værdien 0 for skift (altså ingen skift) fra nu og tilbage i tiden til det seneste pumpeskift, repræsenteret ved værdien 1.
Jeg er ikke helt sikker på om en sql forespørgsel stopper når det første 1 for pumpeskift.
Jeg laver gerne en while do i php for at lave løsningen - så det er ikke begrænset til sql.
Som jeg læser #2 lægger du op til at jeg skal arbejde med 3 tabeller. Nu har jeg kun én tabel med relevante data. Hvis jeg forstår din idé, så tager den ikke højde for at tabellen jo indeholder flere rækker med konditionen 0 og 1 og det er kun de nyeste 0'er jeg er interesseret i når jeg skal lave beregningen.
#6 jeg kan stadig ikke se, den stopper når den når det første positive resultat, kondition=1 Hvis det ikke er tilfældet må du gerne lægge lidt forklaring ind i dit svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.