我有一张桌子:
Child2
我想找到最接近的更新时间戳之间给定日期的最大增量。例如,如果有5行:
id | updated_at
1 | 2018-10-22T21:00:00Z
2 | 2018-10-22T21:02:00Z
最大增量在4到5(10分钟)之间。请注意,实际上,在进行比较时,我只想查找下一个最接近的update_at时间戳,然后将其作为id | updated_at
1 | 2018-10-22T21:00:00Z
2 | 2018-10-22T21:02:00Z
3 | 2018-10-22T21:05:00Z
4 | 2018-10-22T21:06:00Z
5 | 2018-10-22T21:16:00Z
。我觉得我正在弄乱子查询来做到这一点。
max
答案 0 :(得分:2)
SELECT
lead(updated) OVER (ORDER BY updated) - updated as diff
FROM dates
ORDER BY diff DESC NULLS LAST
LIMIT 1;
使用window function LEAD
可以获取下一行的值:在这种情况下,您可以获取下一个时间戳。
这样您就可以进行减法运算,对结果进行降序排序并取第一个值。
答案 1 :(得分:1)
使用lag
从上一行中获取Updated_at,然后获取每天的最大差异。
select dt_updated_at,max(time_diff)
from (select updated_at::date as dt_updated_at
,updated_at - lag(updated_at) over(partition by updated_at::date order by updated_at) as time_diff
from tbl
) t
group by dt_updated_at
使用DISTINCT ON
的另一个选项(仅适用于Postgres ..,因为该问题最初被标记为Postgres,请保留此答案)
select distinct on
(updated_at::date)
updated_at::date as dt_updated_at
,updated_at-lag(updated_at) over(partition by updated_at::date order by updated_at) as diff
from dates
order by updated_at::date,diff desc
nulls last