MySQL Forums
Forum List  »  German

Re: Nulldurchgänge zählen
Posted by: Thomas Wiedmann
Date: March 23, 2012 11:17AM

Hallo Stefan,

so eine Abfrage zu formulieren ist in SQL eigentlich nicht vorgesehen, da SQL Mengenorientiert ist und Deine Anforderung ist eine serielle Abfrage, denn die Reihenfolge entscheidet ob etwas zutrifft oder nicht.

Zwei Lösungsmöglichkeiten:

a) Eine Stored Procedure mit CURSOR

b) folgende Abfrage mit MySQL User Variablen. Nicht einfach zu verstehen.

CREATE TABLE temperatur (
 zeitpunkt DATETIME NOT NULL,
 wert DEC(10,2) NOT NULL
);

INSERT INTO temperatur VALUES
( '2012-03-20 10:00:00', 10.0 ),
( '2012-03-20 11:00:00', 11.0 ),
( '2012-03-20 12:00:00', 12.0 ),
( '2012-03-20 12:30:00', -30.0 ),  /* Nulldurchlauf */
( '2012-03-20 12:40:00', -40.0 ),
( '2012-03-20 13:00:00', 13.0 ),
( '2012-03-20 13:30:00', -30.0 ),  /* Nulldurchlauf */
( '2012-03-20 14:00:00', 14.0 );

    
/**
* Lösung mit MySQL User Variablen
* um aus einer Mengenorientierung eine serielle Abarbeitung 
* zu realisieren
* Fehler: Wenn der "letzte" Datensatz negativ ist, dann wird er nicht angezeigt
*/
SELECT t3.*, t5.* 
  FROM (SELECT t2.numrow, t2.zeitpunkt, t2.wert
          FROM ( SELECT @numrow1 := 1 ) init
          JOIN ( SELECT @numrow1 AS numrow, t.zeitpunkt, t.wert, @numrow1 := @numrow1 +1
                   FROM temperatur t
                  ORDER BY t.zeitpunkt
               ) t2
        ) t3
  JOIN (SELECT t4.numrow, t4.zeitpunkt, t4.wert
          FROM ( SELECT @numrow2 := 1 ) init
          JOIN ( SELECT @numrow2 AS numrow, t.zeitpunkt, t.wert, @numrow2 := @numrow2 +1
                   FROM temperatur t
                  ORDER BY t.zeitpunkt
               ) t4
        ) t5
    ON t3.numrow+1 = t5.numrow
   AND t3.wert >= 0
   AND t5.wert < 0 
ORDER BY t3.zeitpunkt;
+--------+---------------------+-------+--------+---------------------+--------+
| numrow | zeitpunkt           | wert  | numrow | zeitpunkt           | wert   |
+--------+---------------------+-------+--------+---------------------+--------+
| 3      | 2012-03-20 12:00:00 | 12.00 | 4      | 2012-03-20 12:30:00 | -30.00 |
| 6      | 2012-03-20 13:00:00 | 13.00 | 7      | 2012-03-20 13:30:00 | -30.00 |
+--------+---------------------+-------+--------+---------------------+--------+
2 rows in set (0.02 sec)

mysql>

EDIT
Abfrageergebnis hat gefehlt...

Grüße
Thomas



Edited 1 time(s). Last edit at 03/23/2012 11:39AM by Thomas Wiedmann.

Options: ReplyQuote


Subject
Views
Written By
Posted
1989
March 23, 2012 09:55AM
Re: Nulldurchgänge zählen
1282
March 23, 2012 11:17AM
1139
March 25, 2012 05:18AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.