【发布时间】:2021-08-24 16:50:12
【问题描述】:
我想根据标识符连接来自同一列的字符串。例如,给定表格:
| Timestamp | ID | event_type |
|---|---|---|
| 2021-04-17 01:51:44 | A | login |
| 2021-04-17 01:58:43 | A | payment |
| 2021-04-17 02:01:32 | B | login |
| 2021-04-17 02:15:44 | A | login |
| 2021-04-17 02:57:44 | A | payment |
| 2021-04-17 02:59:44 | B | login |
| 2021-04-17 03:15:44 | B | payment |
| 2021-04-17 03:27:44 | A | login |
| 2021-04-17 03:31:44 | A | payment |
| 2021-04-17 03:45:44 | B | login |
| 2021-04-17 03:52:44 | B | payment |
| 2021-04-17 04:01:44 | B | payment |
| 2021-04-17 04:23:44 | A | login |
我希望我的查询返回:
| event_sequence | ID_sequence |
|---|---|
| login, payment | A, A |
| login | B |
| login, payment | A, A |
| login, payment | B, B |
| login, payment | A, A |
| login, payment, payment | B, B, B |
| login | A |
我正在考虑自引用该列并使用 lag 函数检查两个标识符是否相同,例如:
select case when ID = lag(ID,1) over (partition by ID order by datetime asc)
then event_type || ',' || lag(event_sequence, 1) over (partition by ID order by datetime asc)
as event_sequence,
case case when ID = lag(ID,1) over (partition by ID order by datetime asc)
then ID || ',' || lag(ID_sequence, 1) over (partition by ID order by datetime asc)
as ID_sequence
from table
但我认为不支持自引用。 CTE 可以帮助我获得它吗?
提前感谢大家!
【问题讨论】: