这个查询输出是什么?

时间:2011-04-04 01:33:54

标签: mysql datetime

所以, 我想运行一个快速查询,向我提供一些有关发送消息所需时间的信息。

我的计划是

  1. 计算我们发送的邮件数量
  2. 计算出消息的最大和最小日期时间之间的差异
  3. 计算出每条消息花了多少时间。
  4. 所以我的查询最终成为了

    SELECT 
    COUNT(id)                                                          AS message_sent,
    TIMEDIFF(MAX(msg_sent_datetime), MIN(msg_sent_datetime))           AS total_time_taken,
    COUNT(id)/TIMEDIFF(MAX(msg_sent_datetime), MIN(msg_sent_datetime)) AS time_per_message
    FROM sent_txts_none_action_child 
    GROUP BY parent_id;
    

    前两部分工作正常 你遇到了第三个问题。

    示例输出。

    message_sent|total_time_taken|time_per_message
    5           |00:00:01        |5.0000000000
    5           |00:00:00        |NULL
    5           |00:00:01        |5.0000000000
    7647        |00:28:12        |2.7194167852
    

    第三栏输出是什么?
    我需要更改什么才能输出正确的值?


    修改

    好的,所以在我得到的评论中提出建议的更改后

    message_sent|total_time_taken|time_per_message
    5           |00:00:01        |0.2000000000
    5           |00:00:00        |0.0000000000
    5           |00:00:01        |0.2000000000
    7647        |00:28:12        |0.3677259056
    

    仍然不是我们想要的。
    好像您按0.3677259056 7647计算时间2812

    那么问题是什么? MYSQL没有将datediff值转换为任何逻辑,

    相反,它将它视为一个简单的数字并忽略任何非数字字符......

    为什么mysql没有将其转换为秒/毫秒?

    我可以用它来做这个吗?

1 个答案:

答案 0 :(得分:2)

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

TIMEDIFF()返回时间值。但是,当您对其执行任何数值计算时,它将变为无用的数值(仅以文本形式混合时间中的数字)。

  

计算出每条消息花了多少时间。

所以你的意思是,time / message-count。除数应该是计数。

你得到的是反向,即每单位时间发送的消息。换句话说,你计算的是平均每秒可以发送多少条消息。

SELECT 
COUNT(id)                                                          AS message_sent,
TIMEDIFF(MAX(msg_sent_datetime), MIN(msg_sent_datetime))           AS total_time_taken,
TIME_TO_SEC(TIMEDIFF(MAX(msg_sent_datetime), MIN(msg_sent_datetime)))/COUNT(id) AS time_per_message
FROM sent_txts_none_action_child 
GROUP BY parent_id;

生成的time_per_message列以秒为单位进行测量。

参考:TIME_TO_SEC()