Heim >Datenbank >MySQL-Tutorial >Wie kann ich die Daten des letzten Monats in SQL Server effizient abrufen?

Wie kann ich die Daten des letzten Monats in SQL Server effizient abrufen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-05 06:31:40206Durchsuche

How to Efficiently Retrieve Last Month's Data in SQL Server?

So rufen Sie die Datensätze des letzten Monats in SQL Server ab

Um Datensätze aus einem bestimmten Zeitraum abzurufen, ist es üblich, Bereichsabfragen zu verwenden mit inklusiver Unter- und Obergrenze. Dieser Ansatz birgt jedoch zwei Herausforderungen: Beeinträchtigung der Indexnutzung und potenzielle Auswahl unbeabsichtigter Daten.

1. Indexnutzung:

Das Anwenden von Funktionen auf eine durchsuchte Spalte, einschließlich impliziter Funktionen wie Umwandlung, kann den Optimierer dazu zwingen, Indizes für diese Spalte zu ignorieren, was zu einer linearen Suche durch jeden Datensatz führt. Berücksichtigen Sie Zeitstempel, die normalerweise als chronologische Zählung gespeichert werden. Das Extrahieren von Datumsteilen aus solchen Zeitstempeln erfordert komplexe Berechnungen und verlangsamt die Abfrage.

2. Unbeabsichtigte Daten:

Inklusive Obergrenzenbereiche wie <= können je nach SQL Server-Version und Spaltendatentypen zu einer falschen Datenauswahl führen. Daten von Mitternacht des nächsten Tages oder Datensätze von Teilen des aktuellen Tages können fälschlicherweise ein- oder ausgeschlossen werden.

Richtiger Ansatz:

Um diese Probleme zu beheben, verwenden Sie die Folgende Abfragestruktur:

WHERE date_created >= @startOfPreviousMonth AND date_created < @startOfCurrentMonth

Um den Beginn des vorherigen und des aktuellen Monats zu bestimmen, verwenden Sie Folgendes Berechnungen:

@startOfPreviousMonth = DATEADD(month, -1, @startOfCurrentMonth)
@startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0)

Dieser Ansatz gewährleistet die Indexnutzung und eine genaue Datenauswahl. Das vollständige Skript wäre:

DECLARE @startOfCurrentMonth DATETIME
SET @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0)

SELECT *
FROM Member
WHERE date_created >= DATEADD(month, -1, @startOfCurrentMonth)
AND date_created < @startOfCurrentMonth

Indem der Optimierer Datumsoperationen nur einmal für einen einzelnen Wert ausführt, kann er Indizes nutzen und die Abfrage gibt korrekte Daten zurück.

Das obige ist der detaillierte Inhalt vonWie kann ich die Daten des letzten Monats in SQL Server effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn