Halt! In meiner
Query ist ein kleiner Schusseligkeitsfehler: Ich zähle die Anzahl der Tage, aber wir wollen ja die Differenz zwischen dem niedrigsten und höchsten Datum, zwischen dem sich der Wert einer ID *nicht* geändert hat. Meine
Query funktioniert also nur (und nur dann!), wenn an jedem Tag ein Eintrag in der Tabelle existiert.
Bezogen auf meinen Ansatz, der eine temporäre Tabelle verwendet, würde '@Table' also wie folgt initialisiert:
SQL-Code:
insert into @Table
select id, wert, 1 + DateDiff (day, min (Datum), max (Datum)) as Tage
from test
group by id,wert
Das ist -wohl gemerkt- Microsoft-
SQL, also nicht kompatibel zu
MySQL. Falls Du mit temporären Tabellen arbeiten kannst, müsstest du die Syntax nur entsprechend anpassen. Die hier verwendete Funktion 'DateDiff' berechnet die Anzahl der Tage zwischen den beiden Tagen. Ich hoffe,
MySQL hat eine entsprechende Funktion.
Bezüglich der schwächelnden Performance kann ich nur omata beipflichtet, das hier offenbar ein Index fehlt. Noch was: Temporäre Tabellen wirken oft Wunder, speziell, wenn sie -wie hier- eine
Query stark vereinfachen, die sonst eine komplexe Subquery mehrmals ausführen würde.
Ich erwarte im Übrigen eine Abarbeitungszeit (wenn der Index auf ID+Wert gesetzt ist) von unter einer Sekunde, falls die
Query syntaktisch korrekt ist.
Entschuldige, das ich kein
MySQL kann, aber ich denke, die Gurus kriegen das hin.