Liebe Mitleser,
ich habe folgende Daten:
SELECT * FROM "A_Mess_ID_Ber_Geraden";
"T_Messungen_ID" "T_Messungen_Auswertung_Typ" "T_Messungen_Auswertung_ID" "T_Messungen_Auswertung_von" "T_Messungen_Auswertung_bis" "T_Messungen_Geraden_ID" "T_Messungen_Geraden_Steig" "T_Messungen_Geraden_Achsenab"
125 0 2702 7.992 8.912 3900 2.6272954716530976 -0.47492025196960697
125 0 2703 11.512 12.472 3901 -2.554782692308296 52.39045404616109
125 0 2704 14.632 15.592 3902 2.5820019230780487 -17.312017061555473
125 0 2705 18.192 19.112 3903 -2.5395978260877574 69.14083698552217
125 0 2706 21.352 22.272 3904 2.598395652174373 -34.88059763189409
select * from "T_Messungen_Daten" where "T_Messungen_Daten_Art" = 5;
"T_Messungen_Daten_ID" "T_Messungen_ID" "T_Messungen_Daten_Art" "T_Messungen_Daten_x" "T_Messungen_Daten_y" "T_Messungen_Daten_OK"
58595451 103 5 512.9853487840834 26.362540249449605 false
58595571 103 5 0.88 26.348999118918456 true
58595572 103 5 0.92 26.348999118918456 true
58595573 103 5 0.96 26.348999118918456 true
58595574 103 5 1 26.348999118918456 true
Das Obere sind Geradenstücke mit einer Steigung und einem Achsenabschnitt definiert im x-Bereich von bis.
Das Untere sind Punkte einer unregelmässigen Kurve. Zwischen den Punkten durch eine Gerade angenähert.
Ich möchte nun die Schnittpunkte per SQL berechnen. Diese sollten relativ mittig zwischen von und bis der oberen Tabelle liegen.
Mein Ansatz:
- Ich nehme die obere Tabelle als Ausgangspunkt.
- Dann möchte ich die Punkte aus der unteren dazufiltern, die zwischen von und bis liegen.
- Da zu einem Punkt immer der nächste gehört (um Steigung und Achsenabschnitt zu berechnen) habe ich die untere Tabelle ein zweites mal hinzugefügt. Der x- und y-Wert muss vom darauffolgenden Punkt kommen.
- Dann würde ich die Steigung und den Achsenabschnitt ausrechnen und in jeder Zeile die beiden Geraden schneiden.
- Dann müsste ich nur noch die wegfiltern, deren x-Wert vom Ergebnis nicht im Bereich von bis liegt.
Meine Abfrage läuft aber scheinbar unendlich seit ich den Teil mit dem select t3 eingefügt habe.
Entweder habe ich ein Brett vor dem Kopf…ich komme einfach nicht weiter.
SELECT
a1."T_Messungen_ID",
a1."T_Messungen_Auswertung_von",
a1."T_Messungen_Auswertung_bis",
t1."T_Messungen_Daten_x" as px1,
t1."T_Messungen_Daten_y" as py1,
t2."T_Messungen_Daten_x" as px2,
t2."T_Messungen_Daten_y" as py2
FROM "A_Mess_ID_Ber_Geraden" as a1,"T_Messungen_Daten" as t1,"T_Messungen_Daten" as t2
where t1."T_Messungen_Daten_Art" = 5
and t2."T_Messungen_Daten_Art" = 5
and t2."T_Messungen_Daten_x" = (select t3."T_Messungen_Daten_x" from "T_Messungen_Daten" as t3 where t3."T_Messungen_Daten_x" > t1."T_Messungen_Daten_x" order by t3."T_Messungen_Daten_x" limit 1)
and t1."T_Messungen_Daten_x"
between a1."T_Messungen_Auswertung_von"
and a1."T_Messungen_Auswertung_bis";
Kann mal jemand drüberschauen und sagen “ach was, das geht doch ganz einfach”…
Gruß,
Aksels