获取两列和几行MYSQL之间的平均时间

时间:2018-06-05 12:56:13

标签: php mysql

我有两列,一列包含一个开始TIMESTAMP,另一列包含一个END TIMESTAMP。我想计算所有记录的开始和结束之间的平均时间。目前我尝试了以下内容:

$result = $conn->query( $sql );

$averages = array();

$result = $conn->query( $sql ); # Place the result into an array
if ( $result->num_rows > 0 ) {
    while ( $row = $result->fetch_assoc() ) {


            $sum = 0;

        if($EndColumn == ' '){
            $time = $row[$StartColumn];

        }else{
        $time = strtotime($row[$EndColumn]) - strtotime($row[$StartColumn]);    

            $averages[] = $time; 
         }

        }
    $total = array_sum($averages);

    $count = count($averages);

        $avg = $total/$count;
    return round(($total/$count));

这根本不能正常工作,我认为这可以在sql字符串本身中完成,但是太愚蠢了,无法弄明白。无论哪种方式,请帮助!

3 个答案:

答案 0 :(得分:2)

请试试这个:

   SELECT CAST(AVG(start_date + (IFNULL(end_date,start_date)-start_date)/2) AS DATETIME) AS average_date FROM TableName

如果将日期存储为时间戳,则上述查询将给出所有记录的开始和结束之间的平均时间。

答案 1 :(得分:0)

平均次数

使用时间戳字段的列

Select AVG(timediff(T1, T2)) as time_average from TableName

日期之间的平均值

使用日期时间字段的列

Select AVG(datediff(D1, D2)) as date_average from TableName

答案 2 :(得分:0)

你可以这样试试。你将获得平均秒数。更多详情https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_timestampdiff

Select AVG(TIMESTAMPDIFF(SECOND, starttimestamp, endtimestamp)) from TableName