通过没有子查询的最大时间进行分组

时间:2014-01-08 15:36:16

标签: mysql group-by

我想知道是否有人可以帮助我做以下事情。每个企业都可以有多个笔记。我需要获得最近日期的笔记,(一)针对每个企业。这是我尝试过的,但这似乎产生了错误的结果:

SELECT * FROM note n
GROUP BY business_id
HAVING MAX(`time`)

是否有可能在没有使用子查询的情况下完成

我感谢任何建议,提前谢谢!

2 个答案:

答案 0 :(得分:2)

以下是note(business_id, time)上的索引可能相对有效的一种方法:

SELECT n.*
FROM note n
WHERE not exists (select 1
                  from note n2
                  where n2.business_id = n.business_id and
                        n2.`time` > n.`time
                 );

传统方法也有效:

select n.*
from note n join
     (select business_id, max(time) as maxtime
      from note
      group by business_id
     ) nmax
     on n.business_id = nmax.business_id and n.`time` = nmax.maxtime;

但它必须将聚合作为一个单独的步骤。第一个版本应该只能使用索引来解析where子句。

答案 1 :(得分:0)

您可以使用LEFT JOIN:

SELECT n.*
FROM
  note n LEFT JOIN note n1
  ON n.business_id=n1.business_id
     AND n.`time` < n1.`time`
WHERE
  n1.business_id IS NULL