sql - Postgresql 转换为小时
问题描述
我有一个可以工作的滞后函数,但我需要它以小时为单位返回差异。当我尝试日期差异功能时,我感到困惑。任何帮助表示赞赏。谢谢
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)
推荐阅读
- php - 如何使用jquery选择单选按钮和标签
- python - 避免从字符串中提取 IBAN 号码
- javascript - Groupby一个数组并使用jquery获取元素作为子数组
- php - 错误的 SQL 请求 - Laravel
- regex - 如何让我的正则表达式匹配重叠而没有无限错误?
- java - 在 Maven 中央部署一个版本
- css - Css加载字体:url中的#是什么意思以及如何添加GET参数?
- javascript - 使用谷歌表格中的谷歌应用脚本从系统或 url 读取图像并将图像发布到 API
- swiftui - SwiftUI - ReferenceFileDocument - 无法指示需要保存的文档
- node.js - 应用引擎部署因“无法验证 Node.js 二进制文件”而停止