Hallo - du bist DER Held!
Ich bin einigermaßen biff was man mit
SQL alles machen kann. Ich wollte das doch tatsächlich über Schleifen rausfummeln. Mal abgesehen von der besch... Performance der Schleifenlösung, ist diese
SQL Lösung doch viel eleganter!!
Zitat von
omata:
SQL-Code:
SELECT a.f_name, COUNT(*) AS anzahl
FROM tbl_daten a
LEFT JOIN tbl_daten b
ON ( a.f_date = b.f_date + 1
AND b.f_content = 'W')
WHERE MONTH(a.f_date) = 1
AND a.f_content = 'W'
AND b.nameID IS NULL
GROUP BY a.f_name
oder auch...
SQL-Code:
SELECT MONTH(a.f_date) monat, YEAR(a.f_date) jahr, a.f_name, COUNT(*) AS anzahl
FROM tbl_daten a
LEFT JOIN tbl_daten b
ON ( a.f_date = b.f_date + 1
AND b.f_content = 'W')
WHERE a.f_content = 'W'
AND b.nameID IS NULL
GROUP BY a.f_name, MONTH(a.f_date), YEAR(a.f_date)
Das funktioniert tatsächlich (Variante 2 habe ich bis jetzt getestet).
Ich muß jetzt nur noch richtig verstehen, was da eigentlich richtig passiert
Ich bin momentan dabei diese Variante zu erweitern. Um es nicht noch weiter zu verkomplizieren, hatte ich bis jetzt noch eine weitere Bedingung für das Zyklenzählen "verschwiegen".
Eine weitere Bedingung für das Erkennen eines cycles ist dieses "C" in der Tabelle. Wenn nämlich zwischen zwei "W" ein oder auch mehrere hintereinanderfolgende "F" stehen, dann soll der Zyklus als zusammengehörig erkannt werden.
Also z.b.
"W"
"W"
"C"
"W"
"W"
"F"
"F"
"F"
"W"
"W"
wären dann nicht drei Zyklen sondern nur zwei.
Das "C" kann auch ein "A" oder "S" oder "K" sein. Sowie aber zwischen zwei "W" ein oder mehrere "F" stehen, zählt es als ein Zyklus.
Ich versuche das jetzt irgendwie noch zu integrieren. Wenn du noch Lust hast, wäre ich über einen weiteren Tip natürlich auch nicht böse
Dirk