Zitat
ich habe wirklich das Gefühl als wenn neues "altes" überschreibt im Kopf
Willkommen im Club. Das Gefühl habe ich schon lange. Was ich vor 5-10 Jahren im Schlaf konnte, dann längere Zeit nicht brauchte, habe ich aktuell gänzlich vergessen und muss mich wieder einlesen.
Zitat
Bin grade am überlegen was du da rausgeabfragt hast.
Wie gesagt, das ist eine Datenbank mit 2 Mio Einträgen. Jeden Monat kommen da so 4.000 bis 7.000 hinzu. Im Grund ist es eine Art Logfile, in dem alle Laufzeiten (von bis) der einzelnen Objekte stehen. Laufzeiten können regulär sein (Status 1) oder eben andere Gründe haben. Hier ging es mir nun um Status 9 um darauf reagieren zu können.
Der Sinn war bzw. ist, die Objekte zu finden, die aktuell einen gewissen Status haben und diesen auch eine gewisse Anzahl in Folge hatten. Also im Beispiel als "12x Status 9 in Folge.". Also, jetzt aktuell Status 9 und die vorherigen 12 auch. Wie gesagt, diese "Logeinträge" erfolgen nicht unbedingt gleich. Die kommen in aller Regel monatlich und haben eine Laufzeit (von bis) von einem Monat, dem muss so aber nicht sein. Zudem kommen auch noch die Status 2-8 hinzu. Eine Abfrage nach count() über alle brachte also nichts, da der count dann ja alles zählt, egal in welcher Reihenfolge die Daten vorliegen. Das ganze auf "die letzten 12 Monate" zu beschränken auch nicht, da der Zeitraum eben nicht 1 Monat sein muss.
Dann kam ja weiter oben das von Guppy und auch schon das Angedachte von mir. Den Statuswechsel zu erkennen. Hier war ich dann aber auf einem anderen Lösungsweg, an dem ich scheiterte.
Da ich ja nur die brauche die aktuell Status 9 und eine gewisse Anzahl direkt davor haben, reicht es mir, den letzten Datensatz zu finden, bei dem der Status vom Objekt nicht 9 ist. Wie gesagt, das ist in aller Regel der 12. letzte, kann aber auch der 10. oder der 15. von hinten sein. Also eine Abfrage nach der ID mit dem letzten nicht 9 Status. Das ist dann der letzte Statuswechsel. Anschließend kann alles nach diesem Datensatz mit count() erfasst werden. Das können dann ja nur welche mit Status 9 sein, denn der letzte nicht 9 wurde ja vorher ermittelt.
So, dann das HAVING mit in die Query, damit der mir auch nur die ausgibt, die nach dem Statuswechsel mehr als 12 haben. Ohne HAVING gibt er alle aus, die aktuell Status 9 haben, egal wie viele bis zum, Statuswechsel vorkommen.
So, nun habe ich also dann die Objekte, die einen gewissen Status aktuell haben und den selben Status davor schon über eine gewisse Anzahl hinweg hatten. Der Sinn ist nun hier, den Vorgang im Script dann zu unterbrechen. Also wenn einer schon 12x Status 9 in Folge hatte, dann dem keinen Status 9 mehr geben oder zulassen, erst wieder dann, wenn ein anderer vergeben wurde.
Frei gesagt: Du kannst 12 mal links abbiegen. Danach wird dicht gemacht und du musst rechts abbiegen, stehen bleiben, geradeaus fahren oder sonst was. Hast Du das getan, dann darfst Du wieder links, 12x, dann wird wieder dicht gemacht usw.