我有一个包含多个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))
答案 0 :(得分:0)
从一个返回每个qtr每个qtr的最大日期的查询开始。
将其加入qtr,id和date的表格,以获得最多的"最近的"行。
再次将其加入表中,但这次是在qtr和id上,并使用#2中的值。
或者,根据您使用的DBMS,您可以使用FIRST_VALUE()函数在没有所有连接的情况下执行此操作。但只有当您使用它的数据库支持该功能时才会这样做,例如DB2。