【发布时间】:2013-06-24 20:35:23
【问题描述】:
我不确定将问题称为“以前的有效值”是否合适。事情是这样的:
我有一个表“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 之间的结果集>。例如2012-05-16的值为null,2012-05-16之前的第一个有效值为2012-05-14的3。因此,结果如下:
|------+-----------------+-------|
| name | performanceDate | value |
|------+-----------------+-------|
| Joe | 2012-05-18 | 2 |
| Joe | 2012-05-17 | 2 |
| Joe | 2012-05-16 | 3 |
|------+-----------------+-------|
到目前为止,我计划先将数据插入临时表(因为表“A”对我来说是只读的),然后逐个更新值。但是这种方式非常慢。你对此有什么想法吗?
【问题讨论】:
-
忘了提一下,该过程必须并且大多数情况下每天都为每个用户插入一条记录。如果今天没有数据,则插入“null”。
-
我认为这可能通过一次处理 PL 和元组来实现。因为它只需要一个排序,然后它可以使用会发出元组的历史相关进程流过元组。
-
我刚刚发现子查询也可以做到这一点。
标签: sql group-by db2 sql-order-by