2 Stimmen

MySQL verwenden: Vergleich von Werten in zwei aufeinanderfolgenden Datensätzen in einer Tabelle unter Verwendung eines Zeitstempelfeldes

Ich habe einen Tisch tableData

(startTime, endTime, data)

Zum Beispiel,

startTime               |            endTime             |        data  
2000-01-01 03:00:00     |    2000-01-01 03:00:10         |         88   
2000-01-01 03:00:10     |    2000-01-01 03:00:20         |         33  
2000-01-01 03:00:30     |    2000-01-01 03:00:40         |         67  ......and so on

Ich möchte den Eintrag( 2000-01-01 03:00:20,2000-01-01 03:00:30,0 ) in die Daten eingefügt werden, wenn keine Daten vorhanden sind, also 0. Die Ausgabe wäre :-

 startTime              |           endTime                 |       data  
2000-01-01 03:00:00     |    2000-01-01 03:00:10            |      88   
2000-01-01 03:00:10     |    2000-01-01 03:00:20            |      33    
**2000-01-01 03:00:20   |    2000-01-01 03:00:30            |       0**  
2000-01-01 03:00:30     |    2000-01-01 03:00:40            |      67  .....  and so on

Wie lässt sich dies am einfachsten bewerkstelligen?
Bitte, ich muss es bis heute fertig haben, sonst bringt mich mein Chef um. Danke Leute.

Gibt es eine Möglichkeit zu prüfen, ob die Endzeit der vorherigen Zeile gleich der Startzeit der aktuellen Zeile ist und entsprechend in die Tabelle einzufügen?

MEHR INFO :-

Dies ist die gespeicherte Prozedur, die ich jetzt verwende, um die aus der inputTable zu akkumulieren und in die Ausgabetabelle mit 10 Sekunden-Intervallen zu speichern. http://sqlfiddle.com/#!2/838de/1

0voto

Anda Iancu Punkte 530

Einfach den Datensatz einfügen und eine Ansicht erstellen, in der

SELECT * FROM tableData ORDER BY startTime ASC, endTime ASC;

0voto

inhan Punkte 7224

Hier ist ein Beispiel.

Ich gehe davon aus, dass jeder neue Datensatz größer oder gleich dem größten Datensatz ist. endTime in der Tabelle und jeder Datensatz rückt um 10 Sekunden vor. Ich gehe auch davon aus, dass Sie nie mehrere Zeilen in einem einzigen Aufruf einfügen werden.

Andernfalls müssen Sie noch weitere Angaben dazu machen, wie Sie mit den Möglichkeiten umgehen wollen.

-- DROP PROCEDURE IF EXISTS addRecord;
DELIMITER //
CREATE PROCEDURE addRecord(startT TIMESTAMP, endT TIMESTAMP, rowData INT)
BEGIN
    DECLARE lastEndTime TIMESTAMP;
    SET lastEndTime = (SELECT MAX(`endTime`) FROM tableData);
    WHILE lastEndTime < startT DO
        INSERT INTO tableData (`startTime`,`endTime`,`data`)
        VALUES (lastEndTime,DATE_ADD(lastEndTime, INTERVAL 10 SECOND),0);
        SET lastEndTime = DATE_ADD(lastEndTime, INTERVAL 10 SECOND);
    END WHILE;
    INSERT INTO `tableData` (`startTime`,`endTime`,`data`)
    VALUES (startT,endT,rowData);
END //

Um dies zu nennen

CALL addRecord('2000-01-01 03:00:50','2000-01-01 03:01:00',23);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X