5

データがあり、を使用してレポートをorders生成する必要があります。レポートには週ごとの注文が表示されます。ユーザーは を選択し、その日付に基づいて 12 個の DateRange ユニットを作成する必要があります。たとえば、ユーザーが次のように 12 ポイント/ユニットが必要であると選択したとします。Weekly - Custom date Range of 7 DaysSQLcountEnd Date1/24/2013

Point12 = End Date - 7 Days
Point11 = End Date - 14 Days
Point10 = End Date - 21 Days
Point9  = End Date - 28 Days
.
.
Point1  = End Date - X Days

私たちのソリューション:

テーブルに12行ある一時テーブルを作成する予定です。各行には次のようなデータがあります (各ポイントの startdate と endDate を計算します):

Point   StartDate           EndDate      TotalOrders
Point12  2013-01-24          2013-01-30   
Point11  2013-01-17          2013-01-23  

countこの後、各行の Orders を取得します。

これはこの問題の良い解決策ですか、それとも最適化できますか?

編集:

毎週の DateRange はCustom date Range of 7 Days.

ここに画像の説明を入力

4

2 に答える 2

1

これが SQLServer であることを考えると、一時テーブルではなく、テーブル変数を使用することをお勧めします。

別のアプローチは、メイン クエリの前に別の手順として (テーブル変数/一時テーブルで) 必要な行を生成するのではなく、メイン クエリの一部として CTE で 12 行を生成することです。これにより、必要なステップの総数が減りますが、メイン クエリが少し複雑になります。

于 2013-02-12T08:22:07.193 に答える
-1

グループ化の要素として週を使用しないのはなぜですか?

SELECT
 WEEKOFYEAR(`date`) AS point,
 SUM(orders) AS order
FROM `tablename`
WHERE `date` BETWEEN `startdate` AND `enddate`
GROUP BY point
于 2013-02-12T07:25:20.597 に答える