Hallo Leute.
Ich habe gerade eine kleine Denkblockade und glaube, dass meine Lösung für ein Problem von mir sehr ineffektiv ist und vielleicht hat hier ja jemand einen besseren Vorschlag.
Zu der Tabelle:
Soweit zu der Ausgangssituation.
Nun möchte ich den Startzeitpunkt, Endzeitpunkt und die Zeitdifferenz wissen, in denen der Wert sich nicht geändert hat.
Meine (mögliche) Lösung wäre:
[src=mysql]SELECT t1.timepointAS startpoint, t3.timepoint AS endpoint
FROM tbl AS t1
INNER JOIN tbl AS t2 ON t1.id = t2.id-1
INNER JOIN tbl AS t4 ON t2.mainvalue = t4.mainvalue
INNER JOIN tbl AS t3 ON t3.id = t4.id+1
WHERE t1.mainvalue <> t2.mainvalue AND
t3.mainvalue <> t4.mainvalue AND
t2.mainvalue = 14.1[/src]
Derzeit habe ich leider kein System zur Hand, mit dem ich das testen könnte (SQLFiddler will irgendwie nicht...) aber so ähnlich würde ich das zumindest versuchen zu lösen.
Da gibt es aber bestimmt was besseres, oder nicht?
--- [2017-07-18 16:00 CEST] Automatisch zusammengeführter Beitrag ---
https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in
Über diese Seite habe ich festgestellt, dass meine obere Query noch nicht ganz ausgereift ist. Es können noch Werte "dazwischenspringen" und demnach das Ergebnis beträchtlich verfälschen.
Testquery auf der Seite war:
[src=mysql]SELECT t1.`CustomerID` as id1, t2.`CustomerID` as id2, t3.`CustomerID` as id3, t4.`CustomerID` as id4, t1.`CustomerName` AS startpoint, t3.`CustomerName` AS endpoint, t1.Country, t2.Country, t3.Country, t4.Country
FROM `Customers` AS t1, `Customers` AS t2, `Customers` AS t4, `Customers` AS t3
WHERE t1.`CustomerID` = t2.`CustomerID`-1 AND t2.`Country` = t4.`Country` AND t3.`CustomerID` = t4.`CustomerID`+1 AND t2.CustomerID <> t3.CustomerID AND t1.CustomerID < t3.CustomerID AND t1.`Country` <> t2.`Country` AND t3.`Country` <> t4.`Country` AND t2.Country = "Mexico"[/src]
Ich habe gerade eine kleine Denkblockade und glaube, dass meine Lösung für ein Problem von mir sehr ineffektiv ist und vielleicht hat hier ja jemand einen besseren Vorschlag.
Zu der Tabelle:
id | timepoint | mainvalue | ... | ... |
13 | 2017-07-18-15-00-00 | 13.05 | ||
14 | 2017-07-18-15-00-01 | 14.1 | ||
15 | 2017-07-18-15-00-02 | 14.1 | ||
16 | 2017-07-18-15-00-03 | 14.1 | ||
17 | 2017-07-18-15-00-04 | 15.0 |
Soweit zu der Ausgangssituation.
Nun möchte ich den Startzeitpunkt, Endzeitpunkt und die Zeitdifferenz wissen, in denen der Wert sich nicht geändert hat.
Meine (mögliche) Lösung wäre:
[src=mysql]SELECT t1.timepointAS startpoint, t3.timepoint AS endpoint
FROM tbl AS t1
INNER JOIN tbl AS t2 ON t1.id = t2.id-1
INNER JOIN tbl AS t4 ON t2.mainvalue = t4.mainvalue
INNER JOIN tbl AS t3 ON t3.id = t4.id+1
WHERE t1.mainvalue <> t2.mainvalue AND
t3.mainvalue <> t4.mainvalue AND
t2.mainvalue = 14.1[/src]
Derzeit habe ich leider kein System zur Hand, mit dem ich das testen könnte (SQLFiddler will irgendwie nicht...) aber so ähnlich würde ich das zumindest versuchen zu lösen.
Da gibt es aber bestimmt was besseres, oder nicht?
--- [2017-07-18 16:00 CEST] Automatisch zusammengeführter Beitrag ---
https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in
Über diese Seite habe ich festgestellt, dass meine obere Query noch nicht ganz ausgereift ist. Es können noch Werte "dazwischenspringen" und demnach das Ergebnis beträchtlich verfälschen.
Testquery auf der Seite war:
[src=mysql]SELECT t1.`CustomerID` as id1, t2.`CustomerID` as id2, t3.`CustomerID` as id3, t4.`CustomerID` as id4, t1.`CustomerName` AS startpoint, t3.`CustomerName` AS endpoint, t1.Country, t2.Country, t3.Country, t4.Country
FROM `Customers` AS t1, `Customers` AS t2, `Customers` AS t4, `Customers` AS t3
WHERE t1.`CustomerID` = t2.`CustomerID`-1 AND t2.`Country` = t4.`Country` AND t3.`CustomerID` = t4.`CustomerID`+1 AND t2.CustomerID <> t3.CustomerID AND t1.CustomerID < t3.CustomerID AND t1.`Country` <> t2.`Country` AND t3.`Country` <> t4.`Country` AND t2.Country = "Mexico"[/src]
Zuletzt bearbeitet: