选择每个外键的最高类型记录

时间:2012-01-09 16:23:47

标签: mysql sql

我对看似简单的问题感到十分困惑。也许我只是感到困惑,因为我一直在思考/谷歌搜索/搜索它太久了。

考虑下表:

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

3 个答案:

答案 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
  )