Ich habe ein Django-Modell, das einen eindeutigen Datensatz mit einem Datum enthält. Ich zähle derzeit Datensätze in Bereiche von Tagen, z. X Nummer hat das heutige Datum bereits überschritten, X wird innerhalb der nächsten 10 Tage passieren, X wird innerhalb der nächsten 30 Tage passieren. Der folgende Code ist, was ich derzeit verwende, zieht alle Werte von einer records.objects.all() Abfrage gegen das Modell zurück und durchläuft dann jedes Objekt, um das Datetime-Delta zu berechnen und den relevanten Zähler zu inkrementieren.Performante Berechnung von datetime diffs in Tagen
for x in records:
if x.date is None:
missingValue += 1
else:
delta = x.date - date.today()
if delta.days < 0:
passed += 1
if delta.days < 10:
tenDays += 1
if delta.days < 30:
thirtyDays += 1
Für rund 50.000 Datensätze dies etwa 5-6 Sekunden dauert, die länger ist als ich möchte, ich versuche, dies als die Anzahl der Datensätze zu reduzieren, ist wahrscheinlich zu erhöhen. Die Frage ist wirklich um die performante Berechnung von datetime diffs und Gruppierung der resultierenden Anzahl von Tagen, als ob es eine bessere Methode durch eine Django-Abfrage oder eine andere Methode gibt, die ich nicht finden konnte.
Ich habe die Verwendung von DateAdd in einer Raw-SQL untersucht, aber es scheint, dass ich die Datenbank für jeden Datumsbereich abfragen muss und immer noch dazu führen würde, dass ich die Ergebnisse durchlaufen muss.
Bitte bereiten http://www.rextester.com Demo mit Beispieldaten und gewünschten Ausgang. Ich bin sicher, dass wir in reinem SQL Zeiten unter 1 Sekunde bekommen konnten. – lad2025
http://rextester.com/AWPX46055 - Denken Sie, dass ich das richtig gemacht habe. Gewünschte Ausgabe ist nur die Rückgabe von Zahlen durch die oben genannten Gruppen, die innerhalb von zehn Tagen innerhalb von dreißig Tagen bestanden werden. Ich sehe auch einen zukünftigen Bedarf für etwas über 30 Tage. Die internen Daten sind kumulativ. – Draineh
Danke für Beispieldaten – lad2025