2015-10-13 76 views
0

我在一個階段門的項目管理系統的兩個表,將含有項目ID和每個柵極實際柵極的日期,一個1-5(簡化的)表。另一方面,我有所有預測數據的歷史記錄;預計收益,預計利潤率,預測年度等。每次更新預測時,都會記錄新的預測值,更改的時間戳和項目ID。要求是在第一個表中記錄的實際門限日期之前檢索最新更新的所有指標值。舉例來說,Project 100的門2的日期爲2014-12-18。我需要檢索該日期前的最新值。另一個日期之前MAX日期系列分組

門日期表:

ProjectID  InternalGate2 
---------  ------------- 
100   2014-12-18 
2000   2013-01-15 

歷史公制表:

ProjectID  Metric MetricYear LastUpdated MetricValue 
---------  ------ ---------- ----------- ----------- 
100   Sales  2015   2013-09-05  125000 
100   Sales  2016   2013-09-05  230000 
100   GM  2015   2013-09-05  .48 
100   GM  2016   2013-09-05  .49 
100   Sales  2015   2014-05-26  200000 
100   Sales  2016   2014-05-26  300000 
100   GM  2015   2014-05-26  .50 
100   GM  2016   2014-05-26  .51 
100   Sales  2015   2015-01-28  300000 
100   Sales  2016   2015-01-28  400000 
100   GM  2015   2015-01-28  .55 
100   GM  2016   2015-01-28  .56 

2000   Sales  2014   2012-11-23  200000 
2000   Sales  2015   2012-11-23  300000 
2000   Sales  2016   2012-11-23  310000 
2000   GM  2014   2012-11-23  .75 
2000   GM  2015   2012-11-23  .77 
2000   GM  2016   2012-11-23  .77 
2000   Sales  2015   2013-02-11  450000 
2000   Sales  2016   2013-02-11  450000 
2000   Sales  2017   2013-02-11  500000 
2000   GM  2015   2013-02-11  .68 
2000   GM  2016   2013-02-11  .69 
2000   GM  2017   2013-02-11  .70 

對於本例的結果集合將是項目100中的四行與2014年5月26日的日期LASTUPDATED因爲這是2014-12-18之前的最後一次更新,以及2012-11-23更新了Project 2000的前六行數據。

任何指導將不勝感激。

回答

0

的CTE可能是一個子查詢,如果你喜歡,但這部作品,基本上只使用兩個連接。

;WITH CTE as 
(select h.ProjectID,MAX(LastUpdated) as LatestUpdate 
from Historic h 
inner join Gate g 
on h.ProjectID = g.ProjectID 
and h.LastUpdated <= g.InternalGate2 
group by h.ProjectID) 

select ProjectID,LastUpdated 
from Historic h 
inner join CTE c 
on h.ProjectID = c.ProjectID 
and h.LastUpdated = c.LatestUpdate 
+0

謝謝你的快速反應!它似乎在工作。我現在試圖優化查詢,因爲大約需要一個小時才能返回結果集。我認爲,如果我將初始表格表達式降低到不同的LastUpdate值,它將顯着提供幫助。每次預測更新時,大約120個指標(行)都添加相同的LastUpdate標記。如果我將初始負載限制在不同的日期,我相信它對MAX函數的影響要小得多。 – scottM