MySQL计算具有多行数据的2个日期之间的时间

标签 mysql timestampdiff

我有一个包含 2 列 date_picked_begindate_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/

相关文章:

mysql - mariadb/mysql NOW() 和 TIMESTAMPDIFF 行为 - 是设计使然吗?

javascript - 使用moment JS计算准确的时间差

mysql - 复制表并用文本列替换外部代理键列

mysql - 如何将数据库中的所有字段从 latin1_swedish_ci 更改为 utf8_general_ci?

mysql - 在mysql存储过程中声明变量

php - MySQL SELECT 语句只返回一行

php - 数据库架构 - MYSQL 和 PHP