SELECT max(date) as lastdt,name,col1 FROM `consumption` group by name
在上面的查询中,col1
,max(date)
和name
的值是否来自同一行?
答案 0 :(得分:1)
MySQL允许非聚合列出现在查询的SELECT
子句中。但是,这些列的值是不确定的。
如果您想获得与具有最大col1
值的记录对应的date
值,那么您将需要进行额外的加入:
SELECT t1.*
FROM `consumption` AS t1
JOIN (SELECT max(`date`) as lastdt, name
FROM `consumption`
group by name) AS t2
ON t1.name = t2.name AND t1.`date` = t2.lastdt
答案 1 :(得分:0)
简短回答:他们可能是也可能不是。请参阅how mysql handles the group by clause
上的mysql文档[MySql]可以自由选择每个组中的任何值,所以除非它们是 同样,所选择的值是不确定的,这可能不是什么 你想要的。
对于长篇答案,您需要阅读我上面链接的整个页面,这将为您提供完整的图片。
总结一下:在某些配置设置下,mysql以宽松模式解释group by子句,允许select列表中不在group by子句中的字段,也不受任何分组函数的约束(例如sum() )。在这种情况下,mysql可以自由地从给定组中为这样的字段选择任何值。