我有一个包含 2 列 date_picked_begin
和 date_picked
的表格,并且会有多行,每行都包含一个日期。
如何使用 TIMESTAMPDIFF
获取所有数据行中日期之间的秒数差异。
我尝试了以下查询,但它只返回与第一行的秒数差异。 (这是别名total_picking_waiting_time,它试图获取总时间)。
SELECT COUNT(pi.pi_id) AS num_picking_waiting_time,
AVG(TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked)) AS average_picking_waiting_time,
TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked) AS total_picking_waiting_time
FROM (SELECT pi_id, type, date_picked_begin, date_picked, picker FROM pickwave_items) as pi
WHERE pi.type = 'Picking (Waiting Time)' AND DATE(pi.date_picked) = '2017-02-25' AND pi.picker = 1
此外,我一直假设此查询获取所有行中两个日期之间的平均时间。是这样吗?由于它没有像我预期的那样返回总时间,我现在认为它不是。
谢谢
最佳答案
首先,FROM
中的子查询是不必要的。它增加了查询的冗长性,实际上减慢了查询速度(因为 MySQL 实现了此类子查询)。
然后,要获取总拣选时间,请使用 SUM()
:
SELECT COUNT(pi.pi_id) AS num_picking_waiting_time,
AVG(TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked)) AS average_picking_waiting_time,
SUM(TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked)) AS total_picking_waiting_time
FROM pickwave_items as pi
WHERE pi.type = 'Picking (Waiting Time)' AND
DATE(pi.date_picked) = '2017-02-25' AND
pi.picker = 1;
关于MySQL计算具有多行数据的2个日期之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42456599/