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

ETC

我可以为日期和星期组合建立一个表格,这样我就可以确定星期。我怎样才能复制费率呢?外部连接或类似的东西?

4

1 回答 1

1

关于你的数据我有很多不知道的地方,但这里有一个建议。第一个子查询选择所有不同的人,第二个子查询将这些人中的每一个与每周相匹配(假设您将周存储为日期和周日早上 00:00)。这假设 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 回答