【问题标题】:Get average time between two columns and several rows MYSQL获取两列和几行MYSQL之间的平均时间
【发布时间】:2018-06-05 12:56:13
【问题描述】:

我有两列,一列包含开始 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 字符串本身中完成,但我太愚蠢了,无法弄清楚。不管怎样,请帮忙!

【问题讨论】:

标签: php mysql


【解决方案1】:

请试试这个:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      时间平均值

      使用时间戳字段的列

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

      日期之间的平均值

      使用日期时间字段的列

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

      【讨论】:

      • 啊,我错过了。不知道我是否应该删除这篇文章。这不是一个直接的答案,但可能对将来寻找“获取两列和几行 MYSQL 之间的平均时间”问题的解决方案的人有所帮助。
      • 可能不会删除,而是使用两种解决方案进行编辑,一个用于时间戳,另一个用于日期可能是明智的,还说明在 MYSQL D1 和 D2 必须在 Date 或 DateTime 中才能工作
      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2021-03-14
      • 2023-02-15
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多