我有一个包含客户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
答案 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"当它显然不是唯一的时候。