5

次のような形式の SQL テーブルがあります。

8/1/2012   0.111
8/2/2012   0.222
8/5/2012   0.333
.
.
.

指定した日付範囲の 2 番目の列の平均値を取得するクエリを実行したいと考えています。存在しない日付 (上記の表の 2012 年 8 月 3 日と 2012 年 8 月 4 日) については、欠落している日付に最後の既知の値 (0.222) を使用したいと考えています。どうすればこれを行うことができますか?

4

1 に答える 1

3

編集:申し訳ありませんが、これが実際に機能すると初めて思ったときに質問を理解できなかったと思います(テスト済み)

私がしたこと:

  1. テストする一時テーブルを作成しました(テストできるように含まれています)
  2. Datesという名前のテーブルを作成する再帰的な共通テーブル式を作成しました(特定の日付から別の日付までのすべての日付を取得できます)
  3. クエリには、範囲内のすべての日付を含むテーブルを返すサブクエリがあり、すべての日付について、指定された日付より前の値を持つテーブル内の最大日付
  4. このテーブルは値を持つテーブルと結合され、平均が計算されます

    CREATE TABLE #Table1 (date_column  DateTime, Value Decimal(5,4))
    INSERT INTO #Table1 VALUES ('20120804', 0.1234)
    INSERT INTO #Table1 VALUES ('20120808', 0.2222)
    INSERT INTO #Table1 VALUES ('20120809', 0.9876)
    INSERT INTO #Table1 VALUES ('20120812', 0.0505);
    
    WITH Dates(date_column , row )
    AS (SELECT Cast('20120804' as datetime) date_column, 0 as row
    UNION ALL
    SELECT DateAdd(Day, 1, date_column), row + 1
    FROM Dates
    WHERE date_column < '20120830'
    ) 
    SELECT AVG(Value) FROM (
    SELECT Dates.date_column, (SELECT  MAX(date_column)
    FROM #Table1 WHERE #Table1.date_column <= Dates.date_column) maxDateWithValue 
    FROM Dates
    ) AllDatesWithLastDateWithValue
    LEFT JOIN #Table1 ON AllDatesWithLastDateWithValue.maxDateWithValue = #Table1.date_column 
    WHERE AllDatesWithLastDateWithValue.date_column >= '20120804'
    AND AllDatesWithLastDateWithValue.date_column <= '20120815'
    

これが役に立てば幸いです...いい質問です...

于 2012-08-17T03:34:45.247 に答える