【问题标题】:replace value in column with most recent value using date criteria使用日期条件将列中的值替换为最近的值
【发布时间】:2015-11-16 21:34:03
【问题描述】:

我有一个包含多个 id (30+) 和 5+ 个季度的表,需要在 where 子句中使用。示例表1:

ID   date            qtr        Value
______________________________________
1    2014-01-12      2014Q1     0.123
1    2014-02-14      2014Q1     0.126
1    2014-03-23      2014Q1     0.232
1    2014-04-10      2014Q2     0.222
1    2014-06-12      2014Q2     0.226
2    2014-01-13      2014Q1     0.120
2    2014-02-24      2014Q1     0.132
2    2014-03-21      2014Q1     0.241
2    2014-04-11      2014Q2     0.299
2    2014-06-14      2014Q2     0.312

我想编写一个查询,使用日期字段将每个季度的每个 ID 的值替换为该季度的最新值。这是我想要的结果表:

ID   date            qtr        Value
______________________________________
1    2014-01-12      2014Q1     0.232
1    2014-02-14      2014Q1     0.232
1    2014-03-23      2014Q1     0.232
1    2014-04-10      2014Q2     0.226
1    2014-06-12      2014Q2     0.226
2    2014-01-13      2014Q1     0.241
2    2014-02-24      2014Q1     0.241
2    2014-03-21      2014Q1     0.241
2    2014-04-11      2014Q2     0.312
2    2014-06-14      2014Q2     0.312

这是我目前的查询.. 但出现错误:

select id, qtr, month(date) as date1, date, value
from table1 
where qtr = '2014Q1' and id = '1'
group by id, qtr, date, month(date), value
Having month(convert (varchar, date, 112)) = max(month(date)) 

【问题讨论】:

    标签: sql datefield


    【解决方案1】:
    1. 从返回每个 qtr 每个 id 的最大日期的查询开始。

    2. 将其加入到 qtr、id 和日期的表中,以获得最新的“最近”行。

    3. 再次将其加入表中,但这次是在 qtr 和 id 上,并使用来自 #2 的值。

    或者,根据您使用的 DBMS,您可以使用 FIRST_VALUE() 函数来执行此操作而无需所有连接。但前提是您使用的数据库支持该功能,例如 DB2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-24
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2021-07-02
      • 2021-11-26
      相关资源
      最近更新 更多