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

How to count records in given interval?

我有一个 table 和 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|

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

您可以使用 distinct on 和 window 函数:

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 比最新的 created_at.

Demo on DB Fiddle.

示例数据:

created_at          | user_id
:------------------ | ------:
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

结果:

user_id | flag
------: | :---
      1 | t   
      2 | f