MySQL分组查询每组最新的一条数据(通俗易懂)

开发中经常会遇到,分组查询最新数据的问题,比如下面这张表(查询每个地址最新的一条记录):MySQL分组查询每组最新的一条数据(通俗易懂)_第1张图片

 平常我们会进行按照时间倒叙排列然后进行分组,获取每个供应商的最新记录,sql如下:

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
        ) a GROUP BY a.supplierId

但是查询结果却不是我们想要的:

很显然,并没有像我们想象中的按报价时间倒叙排序,这是为什么呢?

因为在mysql5.7的时候,子查询的排序已经变为无效了,可能是因为子查询大多数是作为一个结果给主查询使用,所以子查询不需要排序的原因。

那么我们应该怎么查呢,有一下方式:


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

结果为:

对子查询的排序进行limit限制,此时子查询就不光是排序,所以此时排序会生效,但是限制条数却只能尽可能的设置大些

你可能感兴趣的:(mysql,sql优化,mysql)