PHP Mysql计算日期时间之间的平均值并忽略平均值中的负结果

标签 php mysql sql

问题:如何执行下面的查询并让它忽略结果中可能为负的任何时间跨度,而不排除其他时间跨度的相关数据? (换句话说,我不能将条件放在 WHERE 子句中,因为也许 Timespan1 和 2 是好的,但 timespan3 是负数,但我想保留它们。

我是否在 AVG 函数中放置了 case 语句?有没有更有效的方法来运行它?

    SELECT DATE(tbl.time1) AS 'date',
          AVG((time_to_sec(timediff(tbl.time2 , tbl.time1))/3600) ) AS 'avg_time1',
          AVG((time_to_sec(timediff(tbl.time3 , tbl.time2))/3600) ) AS 'avg_time2',
          AVG((time_to_sec(timediff(tbl.time4 , tbl.time3))/3600) ) AS 'avg_time3',
    FROM tbl
    WHERE DATE(tbl.time1) = '$variable'
    GROUP BY DATE(tbl.time1)

我使用重复的 Alex 找到了它,其原理如下:

SELECT AVG(`a`), AVG(IF(`b` > -1, `b`, NULL)), AVG(`c`) FROM `t`;

最佳答案

我相信您希望使用 HAVING 关键字?

SELECT DATE(tbl.time1) AS 'date',
          AVG((time_to_sec(timediff(tbl.time2 , tbl.time1))/3600) ) AS 'avg_time1',
          AVG((time_to_sec(timediff(tbl.time3 , tbl.time2))/3600) ) AS 'avg_time2',
          AVG((time_to_sec(timediff(tbl.time4 , tbl.time3))/3600) ) AS 'avg_time3',
    FROM tbl
    WHERE 
        AND DATE(tbl.time1) = '$variable'
    GROUP BY DATE(tbl.time1) 
    HAVING avg_time1 > 0 AND avg_time2 > 0 and avg_time3 > 0;

关于PHP Mysql计算日期时间之间的平均值并忽略平均值中的负结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23141822/

相关文章:

sql - 在 SQL Server 中合并日期间隔

php - 从 mysql 填充 PHP 数组

php - 如何为搜索查询设置配额并避免分页占用配额

mysql - 如何将表 2 中的新行插入到表 1 中以比较 ID?

sql - 如何访问插入到 Rails 应用程序中的数据? (初学者)

mysql - mysql 中的调度程序在几个小时之间运行

php - PHP/MySQL Web 开发人员应该了解服务器的哪些方面?

php - 比较表内的mysql数据

php - FullCalendar - 如何根据日历上数据库(mysql)表行的逗号分隔日期显示事件

MySQL 确保所有性别都出现在输出中