使用日期条件替换具有最新值的列中的值

时间:2015-11-16 21:34:03

标签: sql datefield

我有一个包含多个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 个答案:

答案 0 :(得分:0)

  1. 从一个返回每个qtr每个qtr的最大日期的查询开始。

  2. 将其加入qtr,id和date的表格,以获得最多的"最近的"行。

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

  4. 或者,根据您使用的DBMS,您可以使用FIRST_VALUE()函数在没有所有连接的情况下执行此操作。但只有当您使用它的数据库支持该功能时才会这样做,例如DB2。