【问题标题】:Group alternate records in Redshift在 Redshift 中对备用记录进行分组
【发布时间】: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 属性。

当前解决方案的问题

因为时间戳字段不是唯一的,我不应该在这个字段上排序。

我想做的事

  1. 我想根据previousid 生成行号。
  2. 我想检查每个输入事件是否都有相关的输出事件。

感谢任何帮助。

【问题讨论】:

  • (1) 如果您将 GUID 替换为简单的代码,您的问题会更容易理解。 (2) Redshift 不支持递归 CTE 或分层查询,因此我怀疑您无法为所欲为。
  • 嗨,戈登,感谢您的建议。我已经进行了必要的编辑。

标签: sql amazon-redshift


【解决方案1】:

您的流程可以在 Redshift 中使用“sql sessionization”技术完成。

基本上,您使用许多 LAG() 语句来比较特定窗口上的数据,然后比较结果以完成最终分类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2021-09-09
    • 2023-04-02
    • 2012-06-11
    相关资源
    最近更新 更多