von Barlee » So, 05.10.2008 19:51
Hallo hawe,
ich orientiere mich einmal an Deinem Ausgangsbeitrag mit folgender Tabelle Tab_Summe

- Tab_Summe.png (13.26 KiB) 1872 mal betrachtet
Diese Tabelle wird mit einer laufenden Nummer versehen.
Code: Alles auswählen
SELECT "Tab_Summe".*, ( SELECT COUNT( * ) FROM "Tab_Summe" AS "Tab_Sub" WHERE "Tab_Summe"."ID" >= "Tab_Sub"."ID" ) AS "lfd" FROM "Tab_Summe"
Das Ergebnis ist folgendes:

- Tab_Summe_V.png (11.39 KiB) 1874 mal betrachtet
Obige Abfrage wird als View Tab_Summe_V gespeichert (rechte Maustaste auf Abfrage >> als Ansicht speichern), um im nächsten Schritt darauf zuzugreifen.
Jetzt wird der View abgefragt und anhand der laufenden Nummer ausgewertet: ("SQL Kommando direkt ausführen" muss aktiviert sein)
Code: Alles auswählen
SELECT
"Sw",
"Sb",
"Zeit"
FROM
(
SELECT
"Gruppe",
"Sw",
"Sb",
sum("t") AS "Zeit"
FROM
(
SELECT
*
,CASE
WHEN "lfd" = (SELECT min("lfd") FROM "Tab_Summe_V") THEN "lfd"
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-1 = "B1"."lfd")) THEN "lfd"
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-2 = "B1"."lfd")) THEN "lfd"-1
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-3 = "B1"."lfd")) THEN "lfd"-2
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-4 = "B1"."lfd")) THEN "lfd"-3
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-5 = "B1"."lfd")) THEN "lfd"-4
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-6 = "B1"."lfd")) THEN "lfd"-5
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-7 = "B1"."lfd")) THEN "lfd"-6
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-8 = "B1"."lfd")) THEN "lfd"-7
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-9 = "B1"."lfd")) THEN "lfd"-8
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-10 = "B1"."lfd")) THEN "lfd"-9
else (SELECT min("lfd") FROM "Tab_Summe_V")
End "Gruppe"
FROM
"Tab_Summe_V"
)
GROUP BY "Gruppe","Sw","Sb"
)
Ergebnis:

- Ergebnis.png (5.77 KiB) 1874 mal betrachtet
Die Abfrage berücksichtigt in dieser Form max. 10 aufeinanderfolgende gleiche Kombinationen von Sw und Sb, könnte aber durch entsprechende Einträge unter CASE ... WHEN erweitert werden. Ich bin mir nicht sicher, ob eine dynamische Umsetzung unter HSQLDB möglich ist. Ich vermute nein.
Vielleicht findest Du in diesem Beispiel einige Anregungen, Deine eigene Lösung zu finden.
Gruß Barlee
Hallo hawe,
ich orientiere mich einmal an Deinem Ausgangsbeitrag mit folgender Tabelle Tab_Summe
[attachment=2]Tab_Summe.png[/attachment]
Diese Tabelle wird mit einer laufenden Nummer versehen.
[code]
SELECT "Tab_Summe".*, ( SELECT COUNT( * ) FROM "Tab_Summe" AS "Tab_Sub" WHERE "Tab_Summe"."ID" >= "Tab_Sub"."ID" ) AS "lfd" FROM "Tab_Summe"
[/code]
Das Ergebnis ist folgendes:
[attachment=1]Tab_Summe_V.png[/attachment]
Obige Abfrage wird als View Tab_Summe_V gespeichert (rechte Maustaste auf Abfrage >> als Ansicht speichern), um im nächsten Schritt darauf zuzugreifen.
Jetzt wird der View abgefragt und anhand der laufenden Nummer ausgewertet: ("SQL Kommando direkt ausführen" muss aktiviert sein)
[code]
SELECT
"Sw",
"Sb",
"Zeit"
FROM
(
SELECT
"Gruppe",
"Sw",
"Sb",
sum("t") AS "Zeit"
FROM
(
SELECT
*
,CASE
WHEN "lfd" = (SELECT min("lfd") FROM "Tab_Summe_V") THEN "lfd"
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-1 = "B1"."lfd")) THEN "lfd"
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-2 = "B1"."lfd")) THEN "lfd"-1
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-3 = "B1"."lfd")) THEN "lfd"-2
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-4 = "B1"."lfd")) THEN "lfd"-3
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-5 = "B1"."lfd")) THEN "lfd"-4
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-6 = "B1"."lfd")) THEN "lfd"-5
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-7 = "B1"."lfd")) THEN "lfd"-6
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-8 = "B1"."lfd")) THEN "lfd"-7
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-9 = "B1"."lfd")) THEN "lfd"-8
WHEN (CONCAT("Sw","Sb") <> (SELECT CONCAT("Sw","Sb") FROM "Tab_Summe_V" "B1" WHERE "Tab_Summe_V"."lfd"-10 = "B1"."lfd")) THEN "lfd"-9
else (SELECT min("lfd") FROM "Tab_Summe_V")
End "Gruppe"
FROM
"Tab_Summe_V"
)
GROUP BY "Gruppe","Sw","Sb"
)
[/code]
Ergebnis:
[attachment=0]Ergebnis.png[/attachment]
Die Abfrage berücksichtigt in dieser Form max. 10 aufeinanderfolgende gleiche Kombinationen von Sw und Sb, könnte aber durch entsprechende Einträge unter CASE ... WHEN erweitert werden. Ich bin mir nicht sicher, ob eine dynamische Umsetzung unter HSQLDB möglich ist. Ich vermute nein.
Vielleicht findest Du in diesem Beispiel einige Anregungen, Deine eigene Lösung zu finden.
Gruß Barlee