另一个日期分组前的 MAX 日期系列
MAX Date series before another date grouped
我在阶段门项目管理系统中有两个 table,一个(简化)table 包含项目 ID 和每个门的实际门日期,1-5。在另一个我有所有预测数据的历史记录; Projected Revenue、Projected Margins、Forecast Year 等。每次更新预测时,它都会记录新的预测值、更改的时间戳和项目 ID。要求是检索第一个 table 中记录的实际门日期之前的最新更新的所有指标值。例如,Project 100 的 Gate 2 日期为 2014-12-18。我需要检索该日期之前的最新值。
门日期 Table:
ProjectID InternalGate2
--------- -------------
100 2014-12-18
2000 2013-01-15
历史指标Table:
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 日,因为这是 2014 年 12 月 18 日之前的最后一次更新,前六行数据为项目 2000 更新于 2012 年 11 月 23 日。
任何指导将不胜感激。
如果您愿意,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
我在阶段门项目管理系统中有两个 table,一个(简化)table 包含项目 ID 和每个门的实际门日期,1-5。在另一个我有所有预测数据的历史记录; Projected Revenue、Projected Margins、Forecast Year 等。每次更新预测时,它都会记录新的预测值、更改的时间戳和项目 ID。要求是检索第一个 table 中记录的实际门日期之前的最新更新的所有指标值。例如,Project 100 的 Gate 2 日期为 2014-12-18。我需要检索该日期之前的最新值。
门日期 Table:
ProjectID InternalGate2
--------- -------------
100 2014-12-18
2000 2013-01-15
历史指标Table:
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 日,因为这是 2014 年 12 月 18 日之前的最后一次更新,前六行数据为项目 2000 更新于 2012 年 11 月 23 日。
任何指导将不胜感激。
如果您愿意,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