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

Posted

技术标签:

【中文标题】如何计算同一张表中 2 个不同行之间的时间差?【英文标题】:How do you calculate a time difference between 2 different rows in the same table? 【发布时间】:2015-02-26 14:58:59 【问题描述】:

我想计算同一个表中 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 小时。

【问题讨论】:

如果记录被编码为是交货还是订单,为什么Delivery_TimeOrder_Time是不同的字段。他们不应该只是Time吗? 如果同一个客户(所以Cust_Id相同)下了几个订单怎么办? @Tripp Kinetics:问题不应该是 - 为什么在订单记录本身的“delivery_time”下没有更新delivery_time? (换句话说,如果不是这个,订单的“delivery_time”是什么意思?) @Tripp Kinetics 是的,如果我制作了数据库,他们应该这样做,但我只是在这个数据库上工作,我没有设计它。 @Veverke 这是看待同一问题的不同方式。但这确实是同样的问题。这种模式设计没有多大意义。 (至少对我而言。) 【参考方案1】:
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

【讨论】:

我需要这个来更新表格而不是提供解决方案的输出,因此不同部门可以在以后查询持续时间列。还有多个客户,因此对一个客户 ID 进行硬编码无助于长期解决方案, @Veverke 刚刚完成它,我没有意识到你已经给了相同的表 2 别名(o.和 t.)才意识到这是可能的。当我让它运行时,我会更新。谢谢 @HardLeeWorking:这就是你执行自加入的方式。 我不知道这是可能的,从长远来看,这对我有更大的帮助,而不仅仅是这个查询。谢谢。 @HardLeeWorking:很酷,这就是全部内容......我们都得到了帮助,我们记得我们需要......在接受之后,有时间回报;- )【参考方案2】:

非常感谢 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;

【讨论】:

以上是关于如何计算同一张表中 2 个不同行之间的时间差?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在python中添加同一列的2个不同行值的值来估算特定的行值

如何计算2个不同行的平均值

计算同一张表中SQL中两个时间戳的差值

如何比较来自不同列和不同行但同一张表的值?

从同一张表中找出两组数据之间的差异

如何找出同一张表中特定状态的多个计数