MySQL查询去重,保留某个字段最大值的记录

本文详细介绍了一种SQL查询技巧,旨在根据子级的最新数据,逆向查询其父级的前五条相关记录。通过三步操作:首先,筛选所有符合条件的数据;其次,进行自链接查询以找到父级记录;最后,组装SQL语句并限制结果数量,确保查询高效准确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:根据子级的最新数据来查询5条父级数据。


1、首先:查询出所有符合的相关数据。

SELECT Q.id , Q.pid FROM Q LEFT JOIN P ON P.id=Q.pid WHERE P.XXOO=... AND Q.XXOO...;

2、其次:自链接查询。

#SELECT A.* FROM A LEFT JOIN B ON A.XXOO = B.XXOO AND A.id < B.id WHERE B.id IS NULL;
SELECT A.* FROM A LEFT JOIN B ON A.XXOO = B.XXOO AND A.id < B.id WHERE B.id IS NULL ORDER BY A.id DESC LIMIT 5;

3、最后:组装sql查询。

    SELECT
        A.* 
    FROM
        (SELECT
            Q.id ,
            Q.pid 
        FROM
            Q 
        LEFT JOIN
            P 
                ON P.id=Q.pid 
        WHERE
            P.XXOO=... 
            AND Q.XXOO...) AS A 
    LEFT JOIN
        (
            SELECT
                Q.id ,
                Q.pid 
            FROM
                Q 
            LEFT JOIN
                P 
                    ON P.id=Q.pid 
            WHERE
                P.XXOO=... 
                AND Q.XXOO...
        ) AS B 
            ON A.XXOO = B.XXOO 
            AND A.id < B.id 
    WHERE
        B.id IS NULL 
    ORDER BY
        A.id DESC LIMIT 5;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值