更新时间戳之间的最大差异

时间:2018-12-04 15:47:01

标签: sql amazon-redshift window-functions

我有一张桌子:

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

2 个答案:

答案 0 :(得分:2)

demo:db<>fiddle

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