我目前的数据存储如下:
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
等
我可以建立一个日期和星期组合的表格,以便我可以确定一周。我怎么能复制这个价格呢?外连接或类似的东西?
答案 0 :(得分: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