如何计算给定间隔内的记录?

Posted

技术标签:

【中文标题】如何计算给定间隔内的记录?【英文标题】:How to count records in given interval? 【发布时间】:2020-06-02 08:31:21 【问题描述】:

我有一个带有 created 列的表。我需要检查是否至少有一条记录是在不到一分钟前创建的,从具有相同 user_id 的最后一条记录开始。例如

|            created|user_id|
|2020-01-01T22:22:22|      1|
|2020-01-01T22:22:44|      1|

^ 匹配我的子句。每隔一分钟创建一次。

|            created|user_id|
|2020-01-01T22:22:22|      1|
|2020-01-01T22:24:44|      1|

^ 不匹配,创建时间超过一分钟。

【问题讨论】:

【参考方案1】:

您可以使用distinct on 和窗口函数:

select distinct on (user_id) 
    user_id,
    created_at 
        <= lag(created_at) over(partition by user_id order by created_at) + interval '1' minute as flag
from mytable
order by user_id, created_at desc

这为每个user_id 提供一条记录,并带有一个名为flag 的布尔列,指示最后一个created_at 是比最新的created_at 早一分钟还是少一分钟。

Demo on DB Fiddle.

样本数据:

created_at |用户身份 :----------------- | ------: 2020-01-01 22:22:22 | 1 2020-01-01 22:22:44 | 1 2020-01-01 22:22:22 | 2 2020-01-01 22:24:44 | 2

结果:

用户 ID |旗帜 ------: | :--- 1 |吨 2 | F

【讨论】:

在 200 万行的表上使用是否省钱?我的意思是,那不会挂我的数据库? @senloa:请描述您在查询结果时遇到的问题。 它不起作用,我有 3 条记录的范围超过 1 分钟,并且具有不同的 user_id,它仍然匹配.. @senloa:我在答案中添加了一个小提琴。这似乎按预期工作。

以上是关于如何计算给定间隔内的记录?的主要内容,如果未能解决你的问题,请参考以下文章

用于识别 5 分钟间隔内的记录的功能

时间间隔内的 SQL 计数

如何在给定间隔下使用牛顿法

获取给定间隔内的随机数-重构代码.com

如何计算 BigQuery 中日期间隔联合的重叠

返回用户输入日期之前用户输入时间间隔内的所有记录