Postgresql 转换为小时

Postgresql Convert to hours

我有一个可用的滞后函数,但我需要它来 return 小时差。当我尝试日期差异函数时,我感到很困惑。任何帮助表示赞赏。谢谢

Select
  well_id,
  reported_date,
  lag (reported_date,1) over (
  partition by well_id
  order by well_id
) AS hour_rate
from 
public.production;

使用EXTRACT(EPOCH FROM age(...))然后计算小时数:

SELECT well_id, reported_date, 
  (EXTRACT(EPOCH FROM age(reported_date,
                          LAG(reported_date) OVER w))/3600)::int
FROM production
WINDOW w AS (PARTITION BY well_id ORDER BY reported_date 
             ROWS BETWEEN 1 PRECEDING AND CURRENT ROW);

演示:db<>fiddle

CREATE TABLE production (well_id int, reported_date date);
INSERT INTO production VALUES 
(1,CURRENT_DATE-1),(1,CURRENT_DATE),(1,CURRENT_DATE+2),
(2,CURRENT_DATE-5),(2,CURRENT_DATE-6),(2,CURRENT_DATE-8);

SELECT 
 well_id, 
 reported_date,
 age(reported_date,LAG(reported_date) OVER w),
 coalesce((
   EXTRACT(EPOCH FROM age(reported_date,LAG(reported_date) OVER w))/3600)::int,0) AS hour_rate 
FROM production
WINDOW w AS (PARTITION BY well_id ORDER BY reported_date 
             ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)
ORDER BY well_id,reported_date;

 well_id | reported_date |  age   | hour_rate 
---------+---------------+--------+-----------
       1 | 2021-08-26    |        |         0
       1 | 2021-08-27    | 1 day  |        24
       1 | 2021-08-29    | 2 days |        48
       2 | 2021-08-19    |        |         0
       2 | 2021-08-21    | 2 days |        48
       2 | 2021-08-22    | 1 day  |        24
(6 rows)