从开始事件生成ID

时间:2017-03-02 12:22:34

标签: sql oracle

我有一个包含客户ID和事件类型的表。每次我有EVENT1我都想增加一个计数器,但是如果事件是EVENT2或EVENT3,那么计数器应该继承前一个值。最终,这将给我一个唯一的标识符,基于EVENT1,这是一个起始行动。

这在Excel中很容易,但我很难创建可以复制它的SQL。

提前致谢!

表格数据:

Customer ID | Event
001         | EVENT1
001         | EVENT1
001         | EVENT1
001         | EVENT2
001         | EVENT3
001         | EVENT1
001         | EVENT1
001         | EVENT2 

期望的输出:

Customer ID | Event  | UniqueID
001         | EVENT1 | 1
001         | EVENT1 | 2
001         | EVENT1 | 3
001         | EVENT2 | 3
001         | EVENT3 | 3
001         | EVENT1 | 4
001         | EVENT1 | 5
001         | EVENT2 | 5

1 个答案:

答案 0 :(得分:1)

您对SQL表有误解,因为您假设您的行有某种顺序。 SQL表表示无序集,除非列明确提供排序。

我假设您有一个列,例如id或日期/时间列。您可以使用分析函数执行所需操作:

select t.*,
       sum(case when event = 'EVENT1' then 1 else 0 end) over
           (partition by customer_id order by id) as event1Id
from t;

还要注意我不愿意打电话给#34; UniqueId"当它显然不是唯一的时候。