我得到了一个列| id | postNumber |的表。一个或多个条目属于一个postNumber。我需要为每个postNumber请求最新的条目。

SELECT `dienstbuch`.`id` , `dienstbuch`.`postNumber`
FROM `dienstbuch`
WHERE `dienstbuch`.`id`
IN (
SELECT max( `dienstbuch`.`id` )
FROM dienstbuch
GROUP BY `dienstbuch`.`postNumber`
)
ORDER BY `id` DESC
LIMIT 2000,10


在具有许多条目的表上使用时,查询将花费很长时间。

我该如何改善?

最佳答案

听起来好像您可以在一次直接查询中请求最大ID

SELECT max( `dienstbuch`.`id` ) maxId, postNumber
FROM dienstbuch
GROUP BY `dienstbuch`.`postNumber`


但是,如果要检索几个字段,则需要一个子查询

SELECT `dienstbuch`.`id` , `dienstbuch`.`postNumber`, dienstbuch.field1, dienstbuch.field2
FROM `dienstbuch`
JOIN
(SELECT max( `dienstbuch`.`id` ) id, postNumber
FROM dienstbuch
GROUP BY `dienstbuch`.`postNumber`
) maxID
on dienstbuch.id=maxID.id and dienstbuch.postNumber=maxID.postNumber
ORDER BY dienstbuch.`id` DESC
LIMIT 2000,10

关于mysql - mysql-替代IN(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22002219/

10-11 03:51