Hallo,
ich habe ein Problem bei einer Abfrage, bei der ein join gemacht werden soll, der etwas Logik enthält.
Erstmal die Tabellen die gejoint werden sollen sehen in etwa so aus:
Tabelle1 - Start :
msec srno dienst status
10 eindeutig1 foo Start
20 eindeutig1 foo Start
22 eindeutig1 foo Start
51 eindeutig2 foo Start
56 eindeutig2 foo Start
65 eindeutig2 foo Start
... ... ... ...
Tabelle2 - Ende:
msec srno dienst status
17 eindeutig1 foo Ende
27 eindeutig1 foo Ende
30 eindeutig1 foo Ende
61 eindeutig2 foo Ende
64 eindeutig2 foo Ende
73 eindeutig2 foo Ende
... ... ... ...
Der Join soll nun auf der srno passieren, so dass die msec von Tabelle1 als beginnmsec und die msec von Tabelle2 als endmsec in die endgültige Tabelle übernommen werden. Da die srno aber bei den drei Einträgen jeweils gleich ist, bekomme ich ein Kreuzprodukt der Zeiten, so dass jede Start mit jeder Endzeit verknüpft ist. Das soll aber nicht der Fall sein.
Eigentlich möchte ich, dass immer nur die kleinste msec von Tab1 mit der kleinsten msec von Tab2, jeweils mit gleicher srno, verknüpft wird. Mit den anderen Einträgen genauso, also zweites mit zweites und letztes mit letztem, so dass in der endgültigen Tabelle, zu jeder Start nur eine Endzeit enthalten ist.
Leider weiss ich nicht, wie ich der Datenbank das mitteilen soll, weil ich die Felder ja schlecht umnummerieren kann, um Tab1.nummer=Tab2.nummer abzufragen oder so.
Die SQL Abfrage sieht momentan so aus:
INSERT INTO ZielTabelle (srno, beginmsec, endmsec) SELECT enter.srno, enter.msec, success.msec FROM (SELECT srno, msec FROM Ausgangstabelle WHERE status='Start' AND dienst='foo' ORDER BY msec) enter, (SELECT srno, msec FROM Ausgangstabelle WHERE status='Ende' AND dienst ='foo' ORDER BY msec) success WHERE enter.srno = success.srno
Bitte helft mir, oder sagt zumindest ob es überhaupt möglich ist, ich weiss einfahc nich mehr weiter.
ich habe ein Problem bei einer Abfrage, bei der ein join gemacht werden soll, der etwas Logik enthält.
Erstmal die Tabellen die gejoint werden sollen sehen in etwa so aus:
Tabelle1 - Start :
msec srno dienst status
10 eindeutig1 foo Start
20 eindeutig1 foo Start
22 eindeutig1 foo Start
51 eindeutig2 foo Start
56 eindeutig2 foo Start
65 eindeutig2 foo Start
... ... ... ...
Tabelle2 - Ende:
msec srno dienst status
17 eindeutig1 foo Ende
27 eindeutig1 foo Ende
30 eindeutig1 foo Ende
61 eindeutig2 foo Ende
64 eindeutig2 foo Ende
73 eindeutig2 foo Ende
... ... ... ...
Der Join soll nun auf der srno passieren, so dass die msec von Tabelle1 als beginnmsec und die msec von Tabelle2 als endmsec in die endgültige Tabelle übernommen werden. Da die srno aber bei den drei Einträgen jeweils gleich ist, bekomme ich ein Kreuzprodukt der Zeiten, so dass jede Start mit jeder Endzeit verknüpft ist. Das soll aber nicht der Fall sein.
Eigentlich möchte ich, dass immer nur die kleinste msec von Tab1 mit der kleinsten msec von Tab2, jeweils mit gleicher srno, verknüpft wird. Mit den anderen Einträgen genauso, also zweites mit zweites und letztes mit letztem, so dass in der endgültigen Tabelle, zu jeder Start nur eine Endzeit enthalten ist.
Leider weiss ich nicht, wie ich der Datenbank das mitteilen soll, weil ich die Felder ja schlecht umnummerieren kann, um Tab1.nummer=Tab2.nummer abzufragen oder so.
Die SQL Abfrage sieht momentan so aus:
INSERT INTO ZielTabelle (srno, beginmsec, endmsec) SELECT enter.srno, enter.msec, success.msec FROM (SELECT srno, msec FROM Ausgangstabelle WHERE status='Start' AND dienst='foo' ORDER BY msec) enter, (SELECT srno, msec FROM Ausgangstabelle WHERE status='Ende' AND dienst ='foo' ORDER BY msec) success WHERE enter.srno = success.srno
Bitte helft mir, oder sagt zumindest ob es überhaupt möglich ist, ich weiss einfahc nich mehr weiter.
Comment