【发布时间】:2019-07-22 21:02:33
【问题描述】:
我正在玩 bigquery。给出以下输入:
+---------------+---------+---------+--------+----------------------+
| customer | agent | value | city | timestamp |
+---------------+---------+---------+--------+----------------------+
| 1 | 1 | 106 | LA | 2019-02-12 03:05pm |
| 1 | 1 | 251 | LA | 2019-02-12 03:06pm |
| 3 | 2 | 309 | NY | 2019-02-12 06:41pm |
| 1 | 1 | 654 | LA | 2019-02-12 05:12pm |
+---------------+---------+---------+--------+----------------------+
我想查找由同一个代理一个接一个(比如说在 5 分钟内)发出的交易。所以上表的输出应该是这样的:
+---------------+---------+---------+--------+----------------------+
| customer | agent | value | city | timestamp |
+---------------+---------+---------+--------+----------------------+
| 1 | 1 | 106 | LA | 2019-02-12 03:05pm |
| 1 | 1 | 251 | LA | 2019-02-12 03:06pm |
+---------------+---------+---------+--------+----------------------+
查询应该以某种方式按代理分组并找到此类事务。但是,正如您从输出中看到的那样,结果并没有真正分组。我的第一个想法是使用 LEAD 功能,但我不确定。你有什么想法吗?
查询思路:
- 按代理和时间戳 DESC 排序
- 从第一行开始,看下一行(使用 LEAD?)
- 检查时间戳差异是否小于 5 分钟
- 如果是这样,这两行应该在输出中
- 继续下 (2nd) 行
当第 2 行和第 3 行也符合条件时,第 2 行将进入输出,这会导致重复行。我还不确定如何避免这种情况。
【问题讨论】:
-
我可能误解了数据,但您能不能简单地按
agent和timestamp排序? -
是的,这可能是第一步。排序后,必须查看第一行,查看第二行,看看时间戳差异是否小于 5 分钟并且客户是否相同。这应该对所有行重复。
标签: google-bigquery