我不确定将问题称为“以前的有效值”是否合适。事情是这样的:
我有一个表“A”:
create table A (
name varchar(16),
performanceDate date,
value int
);
name 和 PerformanceDate 都是主键。
有一个流程会每天为每个用户插入数据。因此,数据将如下所示:
select * from A;
|------+-----------------+-------|
| name | performanceDate | value |
|------+-----------------+-------|
| Joe | 2012-05-18 | null |
| Joe | 2012-05-17 | 2 |
| Joe | 2012-05-16 | null |
| Joe | 2012-05-15 | null |
| Joe | 2012-05-14 | 3 |
|------+-----------------+-------|
目前,我想获得一个 preformanceDate 介于 2012-05-16 和 2012-05-18 之间的结果集,如果当前日期的值为 null,则应将其替换为以前的有效值。例如,2012-05-16 的值为 null,2012-05-16 之前的第一个有效值为3
2012-05-14。因此,结果如下所示:
|------+-----------------+-------|
| name | performanceDate | value |
|------+-----------------+-------|
| Joe | 2012-05-18 | 2 |
| Joe | 2012-05-17 | 2 |
| Joe | 2012-05-16 | 3 |
|------+-----------------+-------|
到目前为止,我打算先将数据插入到临时表中(因为表“A”对我来说是只读的),然后一个一个地更新值。但是这种方式非常慢。你对此有什么想法吗?