0

現在、次のようにデータを保存しています。

PERSON      DATE        RATE
----------------------------
John Smith  1/4/2012    1.2
John Smith  8/6/2012    1.7
John Smith  8/13/2012   1.9
John Smith  8/20/2012   2
John Smith  9/10/2012   1.8
John Smith  10/1/2012   3

私は、各人の年の各週 (日曜日に終了) のレートを出力しようとしています。特定の週のレートが存在しない場合は、前の週が使用されます。つまり:

PERSON      WEEK       RATE
----------------------------
John Smith  1/8/2012    1.2
John Smith  1/15/2012   1.2
John Smith  1/22/2012   1.2
John Smith  1/29/2012   1.2

日付と週の組み合わせのテーブルを作成して、週を特定できます。どうすればレートを複製できますか?外部結合または同様のものですか?

4

1 に答える 1

1

あなたのデータについて私が知らないことがたくさんありますが、ここに提案があります。最初のサブクエリはすべての個別の人物を選択し、2 番目のサブクエリはこれらの各人物を各週に一致させます (週を日付として格納し、日曜日の午前 0 時と仮定します)。これは、 Person が一意であることを前提としていますが、誰が誰であるかを判断するために使用できる主キーがあることを願っています。

SELECT 
    X.Person,
    W.Date,
    X.Rate
FROM
(
    SELECT
        Person
    FROM
        Ratings
    GROUP BY
        Person      
) P

CROSS JOIN
(
    SELECT
         Date AS DateEnd    
    FROM
        Weeks
) W

CROSS APPLY
(   -- Last Rate before week end
    SELECT TOP 1 
        Rate
    FROM 
        Ratings
    WHERE 
        Person = P.Person AND
        Date < Dateadd(DAY,1,W.DateEnd)
    ORDER BY 
        DATE DESC
) X
于 2012-11-21T16:08:05.330 に答える