使用前一行值 oracle sql 填充 table 中的行

Populating rows in table with previous row value oracle sql

+----+---------+-------+--------+---------+--------+
| id | counter | name  | duties | remarks | monies |
+----+---------+-------+--------+---------+--------+
|  1 |       1 | jake  |        |         |        |
|  2 |       0 |       | clean  | misc    | 12k    |
|  3 |       1 | james |        |         |        |
|  4 |       0 |       | clean  | misc    | 12k    |
|  5 |       0 |       | soap   | misc    | 12k    |
|  6 |       0 |       | shower | misc    | 12k    |
|  7 |       1 | john  |        |         |        |
|  8 |       0 |       | dry    | misc    | 12k    |
|  9 |       0 |       | scrub  | misc    | 12k    |
+----+---------+-------+--------+---------+--------+

以上数据按人员分组,然后列出他们的职责:

我需要一种使用 Oracle sql 使数据看起来像这样的方法:

+----+---------+-------+--------+---------+--------+
| id | counter | name  | duties | remarks | monies |
+----+---------+-------+--------+---------+--------+
|  1 |       1 | jake  |        |         |        |
|  2 |       0 | jake  | clean  | misc    | 12k    |
|  3 |       1 | james |        |         |        |
|  4 |       0 | james | clean  | misc    | 12k    |
|  5 |       0 | james | soap   | misc    | 12k    |
|  6 |       0 | james | shower | misc    | 12k    |
|  7 |       1 | john  |        |         |        |
|  8 |       0 | john  | dry    | misc    | 12k    |
|  9 |       0 | john  | scrub  | misc    | 12k    |
+----+---------+-------+--------+---------+--------+

遍历每一行有点麻烦...不介意它的 plsql - sql 更喜欢

尝试了一些东西...但是在每个人的第二行之后它会返回 null

一种方法是lag(ignore nulls):

select coalesce(name, lag(name ignore nulls) over (order by id)),
       . . .
from t;

这是从 name 列中获取先前的非 NULL 值,其中“先前”基于 id 列的顺序。