我想知道是否有人可以帮助我做以下事情。每个企业都可以有多个笔记。我需要获得最近日期的笔记,(一)针对每个企业。这是我尝试过的,但这似乎产生了错误的结果:
SELECT * FROM note n
GROUP BY business_id
HAVING MAX(`time`)
是否有可能在没有使用子查询的情况下完成
我感谢任何建议,提前谢谢!
答案 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