1. Anforderungsbeschreibung1 Das STARTDATE der nächsten Datensatzzeile in einem Datensatz der Originaltabelle T1 (gespeichert als r1, die nächste Zeile ist r2) ist kleiner als das ENDDATE der vorherigen Zeile. Für solche Datensätze wird die Konvertierung wie folgt durchgeführt: 2 Wenn in benachbarten Zeilen der Originaltabelle T1 keine „zeitliche Überlappung“ vorliegt ( d. h. die Definition von 1), bleiben die Originaldaten unverändert. # Textversion#T1 Sequenz-ID Startdatum Enddatum Nummer 1 1 2021-04-20 2021-05-03 200 2 1 2021-05-01 2021-05-24 100 3 1 2021-05-18 2021-05-31 69 4 1 20.05.2021 31.07.2021 34 5 1 2021-08-05 2021-08-25 45 6 1 2021-08-15 2021-09-25 65 # Ausgabeergebnis-ID STARTDATE ENDDATE NUM 1 2021-04-20 2021-04-30 200 1 2021-05-01 2021-05-02 300 1 2021-05-03 2021-05-17 100 1 2021-05-18 2021-05-19 169 1 2021-05-20 2021-05-23 203 1 2021-05-24 2021-05-30 103 1 2021-05-31 2021-07-30 34 1 2021-08-05 2021-08-14 45 1 2021-08-15 2021-08-25 110 1 2021-08-26 2021-09-25 65 2. Ideenübersicht 1. Verlängerung der NachfrageSEQ ID STARTDATUM ENDDATUM NUM 1 1 2021-04-20 2021-05-03 200 2 1 2021-05-01 2021-05-24 100 3 1 2021-05-18 2021-05-31 69 4 1 20.05.2021 31.07.2021 34 Dabei wird der 4. Datensatz über den 2. und 3. Datensatz gelegt. 2. Ideenübersicht 1) T0 ist die von den Auf- und Ab-Funktionen erzeugte Zeitreihe id neues_DATE nächstesSTARTDATE preEndDATE rn 1 24.05.2021 03.05.2021 1 1 2021-05-03 2021-05-24 2021-05-01 2 1 2021-05-01 2021-05-03 2021-04-20 3 1 2021-04-20 2021-05-01 4 2) last ruft den letzten Datensatz in T0 ab, um ihn für die nachfolgende Korrektur vorzubereiten. neues_Datum vorENDDATE ID 2021-05-24 2021-05-03 1 3) „Normal“ extrahiert die Datensätze ohne zeitliche Überlappung in den Originaldaten, als Vorbereitung für eine nachfolgende Korrektur. 4) T_Serial vereinheitlichte die Definition von STARTDATE und ENDDATE und überarbeitete T0 zum ersten Mal. id STARTDATUM ENDDATUM 1 2021-04-20 2021-04-30 1 2021-05-01 2021-05-03 1 2021-05-04 2021-05-24 5) T2 korrigiert die Datensätze, die sich zeitlich nicht überschneiden (löscht den entsprechenden Wert von T0 und aktualisiert das entsprechende ENDDATE). 6) T2 wird mit T1 (Originaltabelle) verknüpft und der Endwert wird nach der Aggregation erhalten. STARTDATUM ENDDATUM NUM 2021-04-20 2021-04-30 200 2021-05-01 2021-05-03 300 2021-05-04 2021-05-24 100 3. SQL-Code Die aktuelle Demoversion ist MySQL 8.0.23. Tabelle löschen, wenn vorhanden, test_ShenLiang2025; CREATE TABLE test_ShenLiang2025 ( seq int DEFAULT NULL, id int DEFAULT NULL, STARTDATE Datum DEFAULT NULL, ENDDATE Datum DEFAULT NULL, NUM int DEFAULT NULL )ENGINE=InnoDB STANDARD-CHARSET=utf8; INSERT INTO test_ShenLiang2025 VALUES ('1', '1', '2021-04-20', '2021-05-03', '200'); INSERT INTO test_ShenLiang2025 VALUES ('2', '1', '2021-05-01', '2021-05-24', '100'); INSERT INTO test_ShenLiang2025 VALUES ('3', '1', '2021-05-18', '2021-05-31', '69'); INSERT INTO test_ShenLiang2025 VALUES ('4', '1', '2021-05-20', '2021-07-31', '34'); INSERT INTO test_ShenLiang2025 VALUES ('5', '1', '2021-08-05', '2021-08-25', '45'); INSERT INTO test_ShenLiang2025 VALUES ('6', '1', '2021-08-15', '2021-09-25', '65'); Schritt 1: Erstellen Sie einen temporären Ergebnisset, um eine Zeitreihe zu generieren. MIT T0 ALS( SELECT-ID, neues_DATUM, LEAD(NEW_DATE,1) ÜBER (PARTITION BY ID ORDER BY NEW_DATE ) nächstesSTARTDATE, LAG(NEUES_DATUM,1) ÜBER (PARTITION NACH ID ORDER NACH NEUES_DATUM) preENDDATE, ROW_NUMBER()OVER(PARTITION BY ID ORDER BY new_DATE DESC) rn AUS ( Wählen Sie DISTINCT ID,STARTDATE neues_DATE FROM test_ShenLiang2025 WHERE seq in (1,2) – Sie können Kommentare hinzufügen, um zu überprüfen, ob nur zwei Datensätze aus der Originaltabelle übernommen werden. Wählen Sie DISTINCT ID,ENDDATE neues_DATE FROM test_ShenLiang2025 WHERE seq in (1,2) -- Sie können Kommentare hinzufügen, um zu bestätigen, dass derzeit nur 2 Datensätze in der Originaltabelle verwendet werden ORDER BY new_DATE )A ),letzte AS (AUSWÄHLEN neues_DATUM,preENDDATE,id AB T0 Wobei nextSTARTDATE NULL ist ),normale AS ( WÄHLEN SIE * AUS ( SELECT-ID, Enddatum, LEAD(STARTDATE,1) OVER (PARTITION BY ID ORDER BY ENDDATE ) nextSTARTDATE, LAG(ENDDATE,1) OVER (PARTITION BY ID ORDER BY ENDDATE) preENDDATE VON test_ShenLiang2025 )A WO ENDDATE > preENDDATE UND ENDDATE < nextSTARTDATE ),T_Serial AS ( SELECT ID,ADDDATE(preENDDATE, INTERVAL 1 DAY ) STARTDATE, neues_DATUM ENDDATE VON zuletzt UNION Wählen Sie bottom_2.ID,bottom_2.new_DATE STARTDATE, FALL, WENN rn =3, DANN bottom_2.nextSTARTDATE SONST ADDDATE(bottom_2.nextSTARTDATE, INTERVAL -1 DAY ) END ENDDATE VON zuletzt BEITRETEN T0 bottom_2 ON bottom_2.nextSTARTDATE<=last.preENDDATE UND bottom_2.id = last.id ),T2 AS( WÄHLEN SIE B.ID, B.STARTDATE, B.ENDDATE AUS ( WÄHLEN SIE A.*, ROW_NUMBER() ÜBER (PARTITION NACH ID, STARTDATE ORDER BY ENDDATE) rn AUS ( WÄHLEN SIE A.ID, A.STARTDATE, A.ENDDATE VON T_Seriell A LINKS JOIN normal B BEI A.STARTDATE = B.ENDDATE UND A.ID = B.ID Wobei B.ENDDATE NULL ist UNION WÄHLEN SIE A.ID, A.STARTDATE, B.ENDDATE VON T_Seriell A INNER JOIN normal B ON ADDDATE(A.ENDDATE, INTERVAL 1 DAY ) = B.ENDDATE UND A.ID = B.ID )A )B, wobei rn =1 ) Schritt 2: Verknüpfen Sie die Zeitreihe mit der Originaltabelle, um das NUM-Feld zu generieren. Wählen Sie T2.STARTDATE,T2.ENDDATE,SUM(T1.NUM) TOTAL FROM T2 BEITRETEN test_ShenLiang2025 T1 AM T2.STARTDATE>=T1.STARTDATE UND T2.ENDDATE<=T1.ENDDATE GRUPPIEREN NACH T2.STARTDATE,T2.ENDDATE BESTELLEN BIS T2.STARTDATE Schritt 4 Ergebnisse anzeigen
Ausführungsergebnis: Damit ist dieser Artikel mit der detaillierten Erläuterung des SQL-Implementierungsfalls zur Wiederherstellung von Zeitreihenfehlausrichtungen abgeschlossen. Weitere relevante Inhalte zu SQL-Zeitfehlausrichtungen und Wiederherstellungsfällen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: HTML verwendet das Titelattribut, um Text anzuzeigen, wenn die Maus darüber schwebt
Die Anzeige von Daten ist seit jeher eine Forderu...
Hyperlink, auch „Link“ genannt. Man kann sagen, d...
Code kopieren Der Code lautet wie folgt: wmode-Pa...
1) Prozess 2) FSImage und Bearbeitungen Nodenode ...
Inhaltsverzeichnis 1. Ereignisverarbeitungsmodell...
Die Haupttextseite von TW hatte früher eine Breite...
Was sind die Lebenszyklusfunktionen von React-Kom...
■ Planung des Website-Themas Achten Sie darauf, da...
Heute werde ich Ihnen einen Unterschied zwischen ...
Ich habe einige Werte grob aufgelistet, um die Di...
Bei der Datenbankoperation ist der Umgang mit Dat...
In diesem Artikelbeispiel wird der spezifische Co...
Im entpackten Paket von Windows 64-Bit MySQL 5.7 ...
HTML Quelltext: <a onclick="goMessage();&...