我在下面编写了一个查询,以确定批次/批次的最新和最早检验时间之间的差异(在名为“持续时间”的自定义列中)。
查询是:
SELECT LOT_ID,
MAX(INSPECTION_TIME),
MIN(INSPECTION_TIME),
MAX(INSPECTION_TIME) - MIN(INSPECTION_TIME) AS Duration
FROM table_name
WHERE LOT_ID = 1392353501 AND INSPECTION_ID = 49
GROUP BY LOT_ID
我得到的结果如下:
LOT_ID | 最大(INSPECTION_TIME) | 分钟(INSPECTION_TIME) | 持续时间 |
---|---|---|---|
1392353501 | 27/05/2023 20:06:03.529000 | 27/05/2023 17:36:50.657000 | +00 02:29:12.872000 |
我是否可以在此结果输出中添加一个额外的列,以小数形式显示以小时为单位的时间差?
根据 Google 的说法,29 分钟、12 秒和 0.872 秒是 0.48690888889 小时。 我将其四舍五入为 0.487(小数点后 3 位)。所以对于上面的例子,它将是:
SELECT LOT_ID,
MAX(INSPECTION_TIME),
MIN(INSPECTION_TIME),
(CAST(MAX(INSPECTION_TIME) AS DATE) - CAST(MIN(INSPECTION_TIME) AS DATE)) * 24
AS Duration
FROM SENSORMAINTAB.SENSOR_INSPECTIONS
WHERE LOT_ID = 1392353501 AND INSPECTION_ID = 49
GROUP BY LOT_ID
如果您想要小数秒,则将时间戳截断到分钟的开头并找到差异,然后包括秒差异:
SELECT LOT_ID,
MAX(INSPECTION_TIME),
MIN(INSPECTION_TIME),
(
TRUNC(MAX(INSPECTION_TIME), 'MI')
- TRUNC(MIN(INSPECTION_TIME), 'MI')
) * 24
+ (
EXTRACT(SECOND FROM MAX(INSPECTION_TIME))
- EXTRACT(SECOND FROM MIN(INSPECTION_TIME))
) / 60 / 60
AS Duration
FROM SENSORMAINTAB.SENSOR_INSPECTIONS
WHERE LOT_ID = 1392353501 AND INSPECTION_ID = 49
GROUP BY LOT_ID
interval day to second
。如果你想保留亚秒精度,你需要提取间隔的每个部分并进行数学计算。
select t.*,
round(
extract(day from duration) * 24
+ extract(hour from duration)
+ extract(minute from duration) / 60
+ extract(second from duration) / 60 / 60,
3
) as rounded
from (
select lot_id,
max(inspection_time) as max_time,
min(inspection_time) as min_time,
max(inspection_time) - min(inspection_time) as duration
from sensormaintab.sensor_inspections
where lot_id = 1392353501 and inspection_id = 49
group by lot_id
) t
使用子查询可以避免重复 max(...) - min(...)
表达式(我们也可以在横向连接中执行此操作)。