【发布时间】:2020-03-18 03:59:27
【问题描述】:
我正在尝试为 Redshift 中的备用记录生成序列号
输入表
| id | previousid | idtype | timestamp |
|----- |------------|--------|--------------------|
| aaaa | | INPUT | 2020-07-03 9:09:23 |
| bbbb | aaaa | OUTPUT | 2020-07-03 9:09:23 |
| cccc | bbbb | INPUT | 2020-07-03 9:09:24 |
| dddd | cccc | OUTPUT | 2020-07-03 9:09:24 |
| ffff | eeee | OUTPUT | 2020-07-03 9:09:25 |
| eeee | dddd | INPUT | 2020-07-03 9:09:25 |
| hhhh | gggg | OUTPUT | 2020-07-03 9:09:25 |
| gggg | ffff | INPUT | 2020-07-03 9:09:25 |
期望的输出
| id | previousid | idtype | timestamp | GroupNo |
|------|---------------|--------|--------------------|---------|
| aaaa | | INPUT | 2020-07-03 9:09:23 | 0 |
| bbbb | aaaa | OUTPUT | 2020-07-03 9:09:23 | 0 |
| cccc | bbbb | INPUT | 2020-07-03 9:09:24 | 1 |
| dddd | cccc | OUTPUT | 2O2O-07-03 9:09:24 | 1 |
| eeee | dddd | INPUT | 2020-07-03 9:09:25 | 2 |
| ffff | eeee | OUTPUT | 2020-07-03 9:09:25 | 2 |
| gggg | ffff | INPUT | 2020-07-03 9:09:25 | 3 |
| hhhh | gggg | OUTPUT | 2020-07-03 9:09:25 | 3 |
我现在在做什么
我目前正在做一个
row_number() over (partition by eventtype order by timestamp desc) as GroupNo
用于生成 GroupNo 属性。
当前解决方案的问题
因为时间戳字段不是唯一的,我不应该在这个字段上排序。
我想做的事
- 我想根据previousid 生成行号。
- 我想检查每个输入事件是否都有相关的输出事件。
感谢任何帮助。
【问题讨论】:
-
(1) 如果您将 GUID 替换为简单的代码,您的问题会更容易理解。 (2) Redshift 不支持递归 CTE 或分层查询,因此我怀疑您无法为所欲为。
-
嗨,戈登,感谢您的建议。我已经进行了必要的编辑。
标签: sql amazon-redshift