Mysql为每个组选择最后一行

Mysql为每个组选择最后一行,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我有一个mysql查询,我试图选择每个组的最后一行,但它不起作用 c_id是组。它现在选择每个组的第一行。首先,不应使用单引号转义列名,因为它不是字符串文字。 其次,您可以执行子查询,分别获取每个c_id的最新时间,并将其与原始表联接,以获取其他列 SELECT MAX('time'), c_id, message, state, time FROM message WHERE receive = 1 GROUP BY c_id 或 谢谢吴宇森 SELECT a.* FROM

我有一个mysql查询,我试图选择每个组的最后一行,但它不起作用


c_id是组。它现在选择每个组的第一行。

首先,不应使用单引号转义列名,因为它不是字符串文字。 其次,您可以执行子查询,分别获取每个c_id的最新时间,并将其与原始表联接,以获取其他列

SELECT  
MAX('time'), c_id, message, state, time 
FROM message 
WHERE receive = 1 
GROUP BY c_id

谢谢吴宇森

SELECT  a.*
FROM    message a
WHERE   a.time =
        (
            SELECT  MAX(time) time
            FROM    message b
            WHERE   a.c_id = b.c_id
        ) 
尝试使用此代码

描述从表格底部开始


限制1在示例中仅选择一行将选择最后一行

能否显示一些示例数据?定义最后一行。定义不工作。@第二个解决方案来自MySQL文档。。。第一个也是,但是第一个要快几个数量级!
SELECT  a.*
FROM    message a
WHERE   a.time =
        (
            SELECT  MAX(time) time
            FROM    message b
            WHERE   a.c_id = b.c_id
        ) 
SELECT a.* FROM survey_question_option a INNER JOIN (
   SELECT    subordinate_question, MAX(sort) sort
   FROM      survey_question_option 
   WHERE     question_id=14
   GROUP BY  subordinate_question
) b ON ((a.subordinate_question = b.subordinate_question) OR (a.subordinate_question IS NULL AND b.subordinate_question IS NULL)) AND
a.sort = b.sort AND a.question_id=14;
SELECT  
MAX('time'), c_id, message, state, time 
FROM message 
WHERE receive = 1 
GROUP BY c_id
DESC LIMIT 1;