如何计算同一个表中两个不同行之间的时差?

时间:2015-02-26 14:59:00

标签: sql oracle11g

我想计算同一个表中2个日期字段之间的差异,但是这些值不在同一行中。下面是一个示例表

ID   Cust_ID   Code      Order_Time           Delivery_Time      Duration
 1     4       Order   01/01/15 14:15
 2     5       order   02/02/15 18:30
 3     4       deliver                         03/02/15 18:15    28:00
 4     6       order    04/02/15 16:22

我需要通过从此客户的delivery_time减去Cust_ID 4的订单时间来计算交付订单所需的时间(持续时间)(以小时为单位)。在上面的示例中,我输入的数字为28小时。

2 个答案:

答案 0 :(得分:0)

SELECT t._cust_id, MAX(order_time) order_time, MAX(delivery_time) delivery_time, MAX(delivery_time) - MAX(order_time) as diff_time
FROM   yourTable t
WHERE  t.cust_id = 4
GROUP BY t.cust_id

SELECT
      o.order_time, d.delivery_time, d.delivery_time - o.order_time as diff_time
FROM  yourTable o, yourTable d
WHERE LOWER(o.code) = 'order'
and   LOWER(d.code) = 'deliver'
AND   o.cust_id = d.cust_id
GROUP BY o._cust_id

-----更新表----- 你能检查以下是否有效吗?我不确定......

UPDATE 
(
    SELECT
          o.order_time, t.delivery_time order_delivery_time, d.delivery_time, d.delivery_time - o.order_time as diff_time
    FROM  yourTable o, yourTable d
    WHERE LOWER(o.code) = 'order'
    and   LOWER(d.code) = 'deliver'
    AND   o.cust_id = d.cust_id
    GROUP BY o._cust_id
) t
SET
  t.order_delivery_time = t.diff_time

答案 1 :(得分:0)

非常感谢Veverke,他不仅帮我解决了这个问题,而且更好地理解了我在SQL中可以做些什么(自我加入)。

这是有效的SELECT查询:

SELECT
       d.delivery_time - o.order_time as diff_time
FROM  yourTable o, yourTable d
WHERE o.code = 'order'
AND   d.code = 'deliver'
AND   o.cust_id = d.cust_id
GROUP BY o.cust_id, d.delivery_time,o.order_time
ORDER BY o.cust_id;