如何计算同一张表中 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_Time
和Order_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 个不同行之间的时间差?的主要内容,如果未能解决你的问题,请参考以下文章