我有一个像下面这样的数据:
date id process name
2022-01-01 12:23:33 12 security John
2022-01-01 12:25:33 12 security John
2022-01-01 12:27:33 12 security John
2022-01-01 12:29:33 12 security John
2022-01-01 14:04:45 12 security John
2022-01-05 03:53:11 12 Infra Sasha
2022-01-05 03:57:30 12 Infra Sasha
2022-01-06 12:23:33 12 Infra Sasha
其他字段相同值的数据相差10分钟基本上是多次点击,只需要考虑第一个。
预期结果:
2022-01-01 12:23:33 12 security John
2022-01-01 14:04:45 12 security John
2022-01-05 03:53:11 12 Infra Sasha
2022-01-06 12:23:33 12 Infra Sasha
我知道我们可以使用datediff(),但我不知道如何通过数据在其余字段相同分组他们。我不知道该从何说起这个逻辑。有人能帮我拿一下这个吗?
谢谢!
您可以使用LAG()
根据子组和每个子组内的顺序来查看前一行的值。例如:
select *
from (
select *, lag(date) over(partition by id, process order by date) as pd from t
) x
where pd is null or date > pd + interval '10 minute'
结果:
date id process name pd
-------------------- --- --------- ------ -------------------
2022-01-05 03:53:11 12 Infra Sasha null
2022-01-06 12:23:33 12 Infra Sasha 2022-01-05 03:57:30
2022-01-01 12:23:33 12 security john null
2022-01-01 14:04:45 12 security john 2022-01-01 12:29:33
参见运行示例:db<>fiddle。