关于mysql中group by和having使用未达到预期的问题

关于以下代码

SELECT product_id,new_price,change_date FROM Products WHERE change_date<='2019-08-16' GROUP BY product_id HAVING MAX(change_date)

表数据:

图片说明

按道理我不是应该获取到每个id最大的日期,为什么得出的数据都是这样的,求解:

图片说明

我之前遇到过跟你一样的问题,不用子查询解决不了,having的执行顺序在group by之后,在执行到having时每个id就只剩一条数据了,试一下下面这个sql。

select * from Products where product_id in (select max(product_id)  from Products where change_date in (select max(change_date) from Products where change_date<='2019-08-16'  group by product_id)group by product_id)
SELECT product_id,new_price,MAX(change_date) FROM Products WHERE change_date<='2019-08-16' GROUP BY product_id

统计函数应该放在选择列中

select product_id,new_price,MAX(change_date) from Products where change_date<='2019-08-16' group by product_id

where先执行,再groupby分组,having最后执行
第一次筛选出<='2019-08-16
然后groupby默认筛选靠前的
可能是这样

GROUP BY 默认是asc 升序, 想要最大ID的日期 加desc 就行了

SELECT product_id,new_price,change_date FROM Products WHERE change_date<='2019-08-16' GROUP BY desc product_id HAVING MAX(change_date)