mysql为导出的max函数列添加条件

标签 mysql aggregate-functions

我有以下 sql,它不适用于 where 条件。

SELECT t.PROJID,sum(t.UNITS) AS totalunits, sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` 
left join projects on projects.PROJID = t.PROJID 
where lastupdated LIKE '%2014-06-11%' 
GROUP BY t.PROJID

最佳答案

您不应在日期上使用 like。正确的解决方案是简单地截断日期并进行比较。但是,您需要使用数据中的字段:

SELECT t.PROJID, sum(t.UNITS) AS totalunits,
       sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` left join
     projects on projects.PROJID = t.PROJID 
where date(t.date) = date('2014-06-11')
GROUP BY t.PROJID;

或者,如果您在 lastupdated 上有索引,则使用范围允许使用索引:

SELECT t.PROJID, sum(t.UNITS) AS totalunits,
       sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` left join
     projects on projects.PROJID = t.PROJID 
where t.date >= date('2014-06-11') and t.date < date('2014-06-12')
GROUP BY t.PROJID;

您可能确实想要使用having,这是通过使用列别名而不是基本列来建议的。在这种情况下:

SELECT t.PROJID, sum(t.UNITS) AS totalunits,
       sum(t.COST) AS totalcost, project, max(t.DATE) as lastupdated, PROJCODE 
FROM `projectcosts` `t` left join
     projects on projects.PROJID = t.PROJID 
GROUP BY t.PROJID
HAVING date(lastupdated) = date('2014-06-11');

关于mysql为导出的max函数列添加条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24204442/

相关文章:

php - 两个不同主机的上传目录

php - 如何找出这个数据库插入和检索在哪里中断?

Oracle:仅插入物化 View

MySQL - 修改查询(NOT NULL)

mysql - 计算两个和的总和

mysql - 如何连接两个mysql表并从连接表中检索最新结果?

php - MySQL 和 MySQLi 在字符编码方面有什么区别?

java - hibernate 标准中 LEFT_JOIN 中的 OR 子句

MySql Sql MAX 和 SUM 错误

google-app-engine - 有没有办法在 Google App Engine 上执行聚合函数?