如何从MySQL表中获取最后3个不同的ID

3

数据库

好的,基本上我有我的数据库表。第一列是id。第二个是pkg_id。第三个不重要,第四个是pkg_id上次出现的id。我需要从表中提取最后3个pkg_id。所以基本上我需要提取最后3个17879 pkg_id和最后3个3075。因此,在这个示例中,我需要为17879提取id 9、7、6,为3075提取id 8、5、3。

我无法理解它。我确实可以访问它之前的id。因此,您会发现对于id 9,它说17879最后在id 7中。id 8最后在id 5中。

如果有人能帮我编写一个查询,那就太棒了。我还使用Java进行数据库访问,因此它不必仅限于mysql。非常感谢。

1个回答

5
SELECT  m.*
FROM    (
        SELECT  pkg_id,
                COALESCE(
                (
                SELECT  id
                FROM    mytable mi
                WHERE   mi.pkg_id = md.pkg_id
                ORDER BY
                        id DESC
                LIMIT 2, 1
                ), 0) AS mid
        FROM    (
                SELECT  DISTINCT pkg_id
                FROM    mytable
                ) md
        ) q
JOIN    mytable m
ON      m.pkg_id <= q.pkg_id
        AND m.pkg_id >= q.pkg_id
        AND m.id >= q.mid

为了使其运行更快,创建一个在mytable (pkg_id, id)上的索引。

请注意这个条件:m.pkg_id <= q.pkg_id AND m.pkg_id >= q.pkg_id而不是单纯的m.pkg_id = q.pkg_id。这是为了索引能够高效地使用而必需的。


圣翔的废话。你是如何想出这个的?你的SQL功夫很强。太神奇了!!非常感谢!! - Drew H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接