MySQL选择组中的最新记录

标签 mysql sql-order-by

Possible Duplicate:
MySQL retrieve latest record for Group

我有一个查询,它将“address1”字段中具有相同信息的所有记录分组,除非它们具有不同的 jobType。

SELECT * 
FROM   jobs 
WHERE  client_id = '".$id."' 
       AND status = '3' 
GROUP  BY CASE 
            WHEN jobType IN ( '0', '3', '6' ) THEN '0' 
            ELSE jobType 
          end, 
          address1 
ORDER  BY Max(id) ASC 

我遇到的问题是查询总是提取组中的第一个实例。我需要它来提取组中的最新实例。我尝试了 ORDER BY 的一些变体,但这似乎并没有起到作用。

任何帮助将不胜感激。

最佳答案

您想要groupwise maximum :

SELECT jobs.*
FROM   jobs NATURAL JOIN (
  SELECT   MAX(id) id
  FROM     jobs
  WHERE    client_id = :id AND status = '3'
  GROUP BY CASE
             WHEN jobType IN ('0','3','6') THEN '0'
             ELSE jobType
           END,
           address1
) t

但是,这对索引不太友好。最好创建一个包含 CASE 表达式结果的列(然后为其建立索引)。

关于MySQL选择组中的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13148633/

相关文章:

mysql - 添加 ORDER BY 会显着减慢 JOIN 查询,即使所有相关列都已编制索引。我怎样才能让它更快?

sql - Oracle - 先按特定值排序,然后再按其他值排序

php - 我的 PHP 电话簿 CRUD 项目出现错误

php - 编辑mysql表

mysql - 如何更改 MYSQL 数据库列的归档排序规则

php - 连接可能在另一表上没有匹配值的表

mysql - 子查询未返回预期结果

SQLite 以自定义顺序返回数据

带有自定义比较器的 Linq orderby 两列排序

mysql - SQL左外连接影响子查询顺序