我完全被一个看似简单的问题难住了。也许我只是困惑,因为我已经想了很久了。
考虑下表:

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个“通知”类型的日志和3个“警告”类型的日志。
我如何才能只选择具有其type的最高id的日志?有效地为我提供每个domain_idtype的最新日志。
只是描述一下会让我觉得很愚蠢,但我似乎做得不对。
谢谢你的帮助。
克里斯
编辑:
为了将来参考,如果要从第一个表中选择所有记录并显示联接表的最新记录(在这种情况下,请选择所有域及其最新日志记录(如果可用)),只需在“域”表中围绕它包装一个select:
SELECT
  domains.*,
  logs.*
FROM
  domains
LEFT JOIN (
  SELECT
    l.*
  FROM
    logs l
  INNER JOIN (
    SELECT
      MAX(log_id) as maxid
    FROM
      logs
    GROUP BY
      domain_id
      type
  ) l3 ON l.log_id = l3.maxid
) l2 USING (domain_id)

最佳答案

首先加入子查询:

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

09-11 20:02
查看更多