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

问题描述 投票:0回答:1

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

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

sql postgresql date greatest-n-per-group window-functions
1个回答
0
投票

您可以使用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 | 22020-01-01 22:24:44 | 2

结果:

user_id |旗------:| :-      1 | Ť      2 | F
© www.soinside.com 2019 - 2024. All rights reserved.