我有一个具有以下属性的表
我需要添加另一列,用相同的用户替换0到最大值,直到该点。例如,请参见第二个表。例如,即使事件3没有采取任何措施,但到目前为止还有2个动作,因此2应该是与该行相关的值。
运行SQL Server 2008 R2
| Username | Seq | Agg|
------------------------
| Username1 | 1 | 1 |
| Username1 | 2 | 2 |
| Username1 | 3 | 0 |
| Username1 | 4 | 0 |
| Username1 | 5 | 3 |
| Username | Seq | Agg| Act|
-----------------------------
| Username1 | 1 | 1 | 1 |
| Username1 | 2 | 2 | 2 |
| Username1 | 3 | 0 | 2 |
| Username1 | 4 | 0 | 2 |
| Username1 | 5 | 3 | 3 |
答案 0 :(得分:2)
SQL的大多数方言都支持ANSI标准窗口函数。你还没有提到哪个数据库,所以我们假设你使用的是:
select a.*,
max(agg) over (partition by username order by seq) as act
from atable a;
如果您的数据库不支持窗口函数(或累积最大值),则可以使用相关子查询执行此操作:
select a.*
(select max(a2.agg)
from atable a2
where a2.id <= a.id
) as act
from atable a;