我有两列,一列包含一个开始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字符串本身中完成,但是太愚蠢了,无法弄明白。无论哪种方式,请帮助!
答案 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