我的表中有一个日期时间字段,并且只想计算不同的时间,而不是使用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分钟。 我想计算所有这些不同,并在表格中得到这个时间的平均值。
非常感谢答案 0 :(得分:3)
一般来说,可以使用MySQL的TIME()
函数仅提取DATETIME
值的时间部分:
SELECT TIME(datetime1), TIME(datetime2)
还可以将其与TIMEDIFF()
结合起来,以获得两个这样的时间之间的差异:
SELECT TIMEDIFF(TIME(datetime2), TIME(datetime1))
但是,由于结果表示为TIME
数据类型,并且没有任何聚合函数可以使用这种数据类型,因此获取平均值会稍微困难一些。相反,我推荐以下hackery:
SELECT SEC_TO_TIME(AVG(
UNIX_TIMESTAMP(SUBTIME(datetime2, TIME(datetime1)))
- UNIX_TIMESTAMP(DATE(datetime2))
))
FROM my_table
答案 1 :(得分: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
)