使用日期条件将列中的值替换为最近的值



我有一个表,它有多个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)) 
  1. 从返回每个id每个qtr的最大日期的查询开始。

  2. 将其返回到qtr、id和date的表中,以获得最"最近"的行。

  3. 再次将其连接回表,但这次是在qtr和id上,并使用#2中的值。

或者,根据您使用的DBMS,您可以使用FIRST_VALUE()函数在不使用所有联接的情况下执行此操作。但只有当您使用的数据库支持该功能时,例如DB2。

相关内容

  • 没有找到相关文章

最新更新