ホームページ >データベース >mysql チュートリアル >SQL Server で先月のデータを効率的に取得するにはどうすればよいですか?

SQL Server で先月のデータを効率的に取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-05 06:31:40245ブラウズ

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

SQL Server で先月のレコードを取得する方法

特定の期間のレコードを取得するには、範囲クエリを利用するのが一般的です。包括的な下限と上限があります。ただし、このアプローチには 2 つの課題があります。インデックスの使用率が損なわれることと、意図しないデータが選択される可能性があることです。

1.インデックスの使用率:

キャストなどの暗黙的な関数を含め、検索された列に関数を適用すると、オプティマイザーがその列のインデックスを無視するようになり、すべてのレコードに対して線形検索が行われる可能性があります。タイムスタンプについて考えてみましょう。タイムスタンプは通常、時系列のカウントとして保存されます。このようなタイムスタンプから日付部分を抽出するには複雑な計算が必要となり、クエリの速度が低下します。

2.意図しないデータ:

< =などの包括的な上部範囲は、SQLサーバーバージョンと列データ型に応じて、誤ったデータ選択につながる可能性があります。翌日の午前 0 時からのデータ、または当日の一部のレコードが誤って含まれたり除外されたりする可能性があります。

正しいアプローチ:

これらの問題に対処するには、次のクエリ構造:

WHERE date_created >= @startOfPreviousMonth AND date_created < @startOfCurrentMonth

前月と現在の月の始まりを確認するには、次のコマンドを使用します。計算:

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

このアプローチにより、インデックスの使用と正確なデータ選択が保証されます。完全なスクリプトは次のようになります。

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

単一の値に対して日付操作を 1 回だけ実行することで、オプティマイザーはインデックスを活用でき、クエリは正しいデータを返します。

以上がSQL Server で先月のデータを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。