我对看似简单的问题感到十分困惑。也许我只是感到困惑,因为我一直在思考/谷歌搜索/搜索它太久了。
考虑下表:
log_id (auto increment primary key)
domain_id (foreign key to "domains" table)
type (enum('notice','warning'))
message (varchar)
执行以下选择:
SELECT *
FROM logs
WHERE domain_id = 4
请给我2个类型' notice'和#3;类型'的3。
如何仅选择ID为type
的最高日志?根据{{1}}和domain_id
有效地向我提供最新的日志。
只是描述它让我感到愚蠢,但我似乎无法做到正确..
感谢您的帮助。
克里斯
修改 为了将来参考,如果您想要从第一个表中选择所有记录并显示已连接表的最新记录(在这种情况下选择所有域及其最新日志记录(如果可用)),只需在域上包含一个选择围着它的桌子:
type
答案 0 :(得分:3)
首先加入子查询:
select
l.*
from
log l
inner join (
select
max(log_id) as maxid
from
log
group by
domain_id,
type
) l2 on
l.log_id = l2.maxid
答案 1 :(得分:2)
您需要的是GROUP BY,如下面的查询:
SELECT `type`, MAX(`log_id`) AS `latest_log`
FROM `logs`
WHERE `domain_id` = 4
GROUP BY `type`;
答案 2 :(得分:1)
对于多样性(虽然我使用@ Eric的回答)你可以使用EXISTS ......
SELECT
*
FROM
log
WHERE
NOT EXISTS (
SELECT *
FROM log AS lookup
WHERE domain_id = log.domain_id
AND type = log.type
AND log_id > log.log_id
)