2 つの日付間のレコードのカウント
多軸グラフを生成するには、指定された期間内の日付ごとに作成されたレコードの数が必要です日付範囲。
問題Statement
共通テーブル式 (CTE) を使用してクエリを作成しようとした最初の試みでは、「オペランド型の衝突: datetime2 は int と互換性がありません。」というエラーが発生しました。これは、日付範囲に使用される datetime2 データ型と日数のオフセットに予期される整数の不一致が原因で発生しました。
解決策
この問題に対処するには、集計テーブルまたは関数を使用すると、パフォーマンスが向上します。 Itzik Ben-Gan によって作成された、そのような集計テーブル関数の 1 つがここに示されています。
WITH L0 AS ( SELECT 1 AS c FROM (VALUES(1),(1),(1),(1),(1),(1),(1),(1), (1),(1),(1),(1),(1),(1),(1),(1)) AS D(c) ), L1 AS ( SELECT 1 AS c FROM L0 AS A CROSS JOIN L0 AS B ), L2 AS ( SELECT 1 AS c FROM L1 AS A CROSS JOIN L1 AS B ), Nums AS ( SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS rownum FROM L2 )
この集計テーブルに基づいて、Date_Range_T CTE を作成できます。
Date_Range_T (d_range) AS ( SELECT TOP(DATEDIFF(day, @StartDate, @EndDate) + 1) DATEADD(day, rownum - 1, @StartDate) AS d_range, DATEADD(day, rownum, @StartDate) AS d_rangeNext FROM Nums )
This Date_Range_T CTE は、@StartDate から @StartDate までの日付の範囲を提供します。 @EndDate.
各日付のレコード数を計算するには、クエリを次のように記述できます。
SELECT d_range, COUNT(Id) AS Total FROM Date_Range_T LEFT JOIN tbl_Support_Requests R ON R.CreatedDate >= T.d_range AND R.CreatedDate < T.d_rangeNext GROUP BY d_range ORDER BY d_range ASC
このクエリは、目的の結果、つまり各日付のレコード数を返します。指定された日付範囲内の日付。
以上がSQL で特定の日付範囲内のレコードを効率的にカウントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。