如何计算给定间隔内的记录?
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:我在答案中添加了一个小提琴。这似乎按预期工作。以上是关于如何计算给定间隔内的记录?的主要内容,如果未能解决你的问题,请参考以下文章