mysql 重复数据 分组 多条最新的记录


需求:MySQL 分组,倒序排序,各分组得到一条最新的记录


问题:时间倒叙的条件并没有生效


原因:因为在mysql5.7的时候,子查询的排序已经变为无效了,可能是因为子查询大多数是作为一个结果给主查询使用,所以子查询不需要排序的原因。这个其实和数据库的版本有关,mysql 5.7之后的版本对子查询做了优化。它将sql 语句优化了。group by后面的条件都干掉了。


解决方案:可以 在“子查询”加 倒序排序 limit 10000,在“主查询” 进行分组,这样倒序排序就生效了,对子查询的排序进行limit限制,限制条数尽可能的设置大些。


例子:
SELECT * FROM(
SELECT
tms.id supplierId,
tms.name supplierName,
tms.contact_name contactName,
tms.contact_phone contactPhone,
til.material_id materialId,
til.recent_quotation recentQuotation,
til.quote_time
FROM
tenant_inquiry_library til
LEFT JOIN tenant_material_supplier tms
ON til.supplier_id = tms.id
WHERE
til.material_id = 1377127968075161602
ORDER BY til.quote_time DESC LIMIT 10000
) a GROUP BY a.supplierId


效果图:


其他与该问题相关的详细文章:


1、sql组内按时间排序,时间会失效
版权声明:本文为CSDN博主 [秃头中成长] 的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。


2、MySQL分组查询每组最新的一条数据(通俗易懂)
版权声明:本文为CSDN博主「C罗辣耳朵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。


posted @ 2022-08-09 18:18  TabKey9  阅读(1012)  评论(0编辑  收藏  举报