sql - 在 Redshift 中对备用记录进行分组
问题描述
我正在尝试为 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生成行号。
- 我想检查每个输入事件是否都有相关的输出事件。
任何帮助表示赞赏。
解决方案
您可以使用“sql sessionization”技术在 Redshift 中完成您的过程。
本质上,您使用许多 LAG() 语句来比较特定窗口上的数据,然后比较结果以完成最终分类。
推荐阅读
- c++ - 当给定索引处的列尚未创建时,setSectionResizeMode() 崩溃
- java - 尝试下载 Eclipse IDE 将我带到 400 错误页面
- asp.net-core - 基于数据库自动添加菜单
- ruby-on-rails - options_for_select 和 i18n
- javascript - 使用 PhoneGap 将文件下载到应用程序的代码不起作用
- javascript - JavaScript中几个方法异步执行的顺序
- r - `space = "free"` 没有消除 ggplot 刻面中的死空间
- arrays - 将 unicode 代码点数组转换为字符串
- javascript - 冻结没有丑陋循环和固定宽度/左值的动态表列?
- c# - 如何在 .NET 核心中使用 MagickImage 向图像添加填充