0

我的表中有一个日期时间字段,并且只想计算不同的时间,而不是使用 mysql 函数的日期,如下所示:

datetime1 : 2013-04-08 08:30:00
datetime2 : 2013-03-08 08:35:00

和另一个样本:

datetime1 : 2013-04-08 08:30:00
datetime2 : 2013-04-08 08:20:00

这 2 个字段的不同时间仅为 5 分钟和 -10 分钟。我想计算所有这些不同并在表中得到这个时间的平均值。

非常感谢

4

2 回答 2

3

一般来说,可以使用 MySQL 的TIME()函数仅提取值的时间部分DATETIME

SELECT TIME(datetime1), TIME(datetime2)

此外,还可以将其与TIMEDIFF()获得两个这样的时间之间的差异:

SELECT TIMEDIFF(TIME(datetime2), TIME(datetime1))

但是,由于结果表示为TIME数据类型,并且没有一个聚合函数可以处理这种数据类型,因此获得平均值会有些困难。相反,我推荐以下黑客:

SELECT SEC_TO_TIME(AVG(
         UNIX_TIMESTAMP(SUBTIME(datetime2, TIME(datetime1)))
       - UNIX_TIMESTAMP(DATE(datetime2))
       ))
FROM   my_table
于 2013-04-27T08:49:11.517 回答
2

如果您想计算平均值,我建议您使用 UNIX 时间戳,因为 没有负值DATETIME,这使得正常平均值毫无用处。

SELECT
  AVG(
    UNIX_TIMESTAMP(datetime2)-UNIX_TIMESTAMP(datetime2)
  ) AS average
FROM tablename

将以秒为单位为您提供平均值。

如果您希望它是伪DATETIME格式,请使用

SELECT
  CONCAT(
    IF(average<0,"-",""),
    FROM_UNIXTIME(ABS(average))
  ) AS averagedt
FROM (
    -- above query here
)
于 2013-04-27T08:56:37.837 回答