von F3K Total » Mo, 09.05.2011 19:00
Hallo zusammen,
ich habe da wieder ein kniffliges Problem in meiner Base-embedded HSQLDB und möchte es wieder gerne per SQL lösen.
Folgende Situation:
Es gibt eine Tabelle "D_00_fehlende_Flugzeiten" integer,integer "AufgabenID", "fehlende Zeiten", siehe Bild:

- geflogene_Durchgänge.png (22.84 KiB) 654 mal betrachtet
Ich möchte nun eine Abfrage generieren, die folgendes Ergebnis liefert:
Solange es unterhalb der maximalen AufgabenID, siehe unterer Abschnitt des Bildes, in diesem Beispiel das Abfrageergebnis "14", in der Spalte "fehlende Zeiten"
eine Zahl größer 0 gibt, soll das Ergebnis die
AufgabenID-1 liefern, also im linken Bild
5, im mittleren Bild
8.
Gibt es unterhalb der 14
keine Zahl größer 0, soll das Ergebnis
14 sein.
Für die beiden ersten Fälle habe ich folgende Lösung:
Code: Alles auswählen
select Min("AufgabenID")-1 as "geflogene_Wertungsdurchgaenge" FROM "D_00_fehlende_Flugzeiten" WHERE "fehlende Zeiten" > 0 AND "AufgabenID"<= SELECT "geplante_Wertungsdurchgaenge" FROM "B_07_geplante_Anzahl_Wertungsdurchgaenge"
Dummerweise liefert diese Abfrage für den letzten Fall, alles Nullen unterhalb der 14, das Ergebnis 0 und nicht 14.
Hat jemand eine Idee, DPunch kannst Du helfen?
Beste Grüße von Rik
Edit:
Habe es selber hinbekommen:
Code: Alles auswählen
select casewhen((select SUM ("fehlende Zeiten") from "D_00_fehlende_Flugzeiten" where "AufgabenID"<= SELECT "geplante_Wertungsdurchgaenge" FROM "B_07_geplante_Anzahl_Wertungsdurchgaenge")= 0,(SELECT "geplante_Wertungsdurchgaenge" FROM "B_07_geplante_Anzahl_Wertungsdurchgaenge"), Min("AufgabenID")-1) as "geflogene_Wertungsdurchgaenge" from "D_00_fehlende_Flugzeiten" where "fehlende Zeiten">0
Wenn jemand eine kürzere Variante finden würde, würde ich mich freuen.
Beste Grüße von Rik
Hallo zusammen,
ich habe da wieder ein kniffliges Problem in meiner Base-embedded HSQLDB und möchte es wieder gerne per SQL lösen.
Folgende Situation:
Es gibt eine Tabelle "D_00_fehlende_Flugzeiten" integer,integer "AufgabenID", "fehlende Zeiten", siehe Bild:
[attachment=0]geflogene_Durchgänge.png[/attachment]
Ich möchte nun eine Abfrage generieren, die folgendes Ergebnis liefert:
Solange es unterhalb der maximalen AufgabenID, siehe unterer Abschnitt des Bildes, in diesem Beispiel das Abfrageergebnis "14", in der Spalte "fehlende Zeiten" [color=#0000FF]eine Zahl größer 0 gibt[/color], soll das Ergebnis die [color=#0000FF]AufgabenID-1[/color] liefern, also im linken Bild [color=#0000FF]5[/color], im mittleren Bild [color=#0000FF]8[/color].
Gibt es unterhalb der 14 [color=#0000FF]keine Zahl größer 0[/color], soll das Ergebnis [color=#0000FF]14[/color] sein.
Für die beiden ersten Fälle habe ich folgende Lösung:
[code]select Min("AufgabenID")-1 as "geflogene_Wertungsdurchgaenge" FROM "D_00_fehlende_Flugzeiten" WHERE "fehlende Zeiten" > 0 AND "AufgabenID"<= SELECT "geplante_Wertungsdurchgaenge" FROM "B_07_geplante_Anzahl_Wertungsdurchgaenge"[/code]
Dummerweise liefert diese Abfrage für den letzten Fall, alles Nullen unterhalb der 14, das Ergebnis 0 und nicht 14.
Hat jemand eine Idee, DPunch kannst Du helfen?
Beste Grüße von Rik
Edit:
Habe es selber hinbekommen:
[code]select casewhen((select SUM ("fehlende Zeiten") from "D_00_fehlende_Flugzeiten" where "AufgabenID"<= SELECT "geplante_Wertungsdurchgaenge" FROM "B_07_geplante_Anzahl_Wertungsdurchgaenge")= 0,(SELECT "geplante_Wertungsdurchgaenge" FROM "B_07_geplante_Anzahl_Wertungsdurchgaenge"), Min("AufgabenID")-1) as "geflogene_Wertungsdurchgaenge" from "D_00_fehlende_Flugzeiten" where "fehlende Zeiten">0[/code]
Wenn jemand eine kürzere Variante finden würde, würde ich mich freuen.
Beste Grüße von Rik