2012-11-21 60 views
0

我現在有存儲的數據如下:SQL - 跨多個星期傳播價值

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 

我可以建立的日期和星期的組合,所以我可以判斷星期的表。我怎樣才能複製率?外部連接或類似的東西?

+1

您正在使用哪種版本的SQL Server?另外,您是否可以提供帶有日期表的查詢。任何答案都是一個很好的起點。 –

+0

MSSQL 2008 我手動建立了一個叫做與2012年各日的記錄和相應的週數(我手動在Excel中計算)WeekEndDates – Tom

回答

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 
+0

像我所追求的表這看起來! 我創建了一個例子這裏的人一些樣本數據誰是有興趣 - http://pastebin.com/EXq0Hw5w 我還是好奇,想看看是否有任何其他的方法來做到這一點是我不有CROSS JOINS/APPLY的經驗。 – Tom

+0

如果表現是一個問題(如果按周計算,很多人都需要經常計算),那麼可以考慮使用一張表作爲歷史數據。這種類型的查詢可以用來填充它。 – digscoop