【问题标题】:MAX Date series before another date groupedMAX 日期系列在另一个日期之前分组
【发布时间】:2016-01-11 15:37:22
【问题描述】:

我在阶段关口项目管理系统中有两个表,一个(简化的)表包含项目 ID 和每个关口的实际关口日期,1-5。另一方面,我有所有预测数据的历史记录; Projected Revenue、Projected Margins、Forecast Year 等。每次更新预测时,它都会记录新的预测值、更改的时间戳和项目 ID。要求是在第一个表中记录的实际门日期之前检索最新更新的所有度量值。例如,Project 100 的 Gate 2 日期为 2014-12-18。我需要检索该日期之前的最新值。

门日期表:

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

对于此示例,结果集将是 Project 100 的四行,其 LastUpdated 日期为 2014 年 5 月 26 日,因为这是 2014 年 12 月 18 日之前的最后一次更新,并且是 Project 2000 的前六行数据于 2012 年 11 月 23 日更新。

任何指导将不胜感激。

【问题讨论】:

    标签: tsql max partition


    【解决方案1】:

    如果您愿意,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
    

    【讨论】:

    • 感谢您的快速回复!它似乎正在工作。我现在正在尝试优化查询,因为返回结果集大约需要一个小时。我认为如果我将初始表表达式减少到不同的 LastUpdate 值,它将有很大帮助。每次更新预测时,都会添加大约 120 个指标(行),它们都具有相同的 LastUpdate 标记。如果我将初始加载限制在不同的日期,我相信它对 MAX 函数的影响会小得多。
    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2010-09-21
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多