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