首页 > 解决方案 > 以最有效的方式获得应用于条件的最小值

问题描述

我想选择具有相同 id 但有条件的记录的最小日期。例如,这些记录有多旧,我现在正在做的是将表连接到自身并应用 id 和所需条件,它工作但非常缓慢。

例如:我得到了 t1:

uid 视频 创建日期
1 2 2021-10-23 20:57:03.100
1 2 2021-10-23 21:02:22.700
1 2 2021-10-23 22:20:09.437
2 4 2021-10-23 10:58:05.447
2 4 2021-10-23 11:36:23.949

这是期望的结果,条件是具有相同 id 的日期之间的最大范围为半小时:(换句话说 - 我正在寻找最有效的方法来获得具有相同 id 的最小日期,该日期小于 date_created 列的一半最多小时。)

uid 视频 创建日期 直流
1 2 2021-10-23 20:57:03.100 2021-10-23 20:57:03.100
1 2 2021-10-23 21:02:22.700 2021-10-23 20:57:03.100
1 2 2021-10-23 22:20:09.437 2021-10-23 22:20:09.437
2 4 2021-10-23 10:58:05.447 2021-10-23 10:58:05.447
2 4 2021-10-23 11:36:23.949 2021-10-23 11:36:23.949

标签: sqlpostgresql

解决方案


对于您的特定条件“具有相同 id 的日期之间的最大范围为半小时”,您可以使用一个window函数。你可以尝试这样的事情:

SELECT uid, vid, date_created
     , first(date_created) over (partition by uid order by date_created range between '30 minutes' preceding and current row) as dc
  FROM your_table

推荐阅读