如何计算给定时间间隔内的记录?
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
.
示例数据:
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
我有一个 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
.
示例数据:
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