避免计数重复的点击SQL

  • 本文关键字:SQL sql amazon-redshift
  • 更新时间 :
  • 英文 :


我有一个像下面这样的数据:

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。

相关内容

  • 没有找到相关文章

最新更新