2015-10-13 73 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