0

我在 mariadb 数据库中有五个表,我想选择每个名称表的最后一个值,

在此处输入图像描述

我执行此 sql 命令以获得主机、名称和严重性,

我试过这个 sql 命令:

select host, e.name, e.severity
from hosts
left join items i on (i.hostid = hosts.hostid)
inner join functions f on (f.itemid = i.itemid)
inner join triggers t on (t.triggerid = f.triggerid)
INNER JOIN events e ON (e.objectid = t.triggerid)
group by hosts.hostid;

我想要最后一个主机、名称和严重性,我想要这个结果在 sql 中:

在此处输入图像描述

4

1 回答 1

1

ROW_NUMBER()您可以使用窗口函数来识别您想要的行,而不是分组。然后过滤是直截了当的。例如:

select host, name, severity
from (
  select h.host, e.name, e.severity,
    row_number() over(partition by h.host order by e.clock desc) as rn
  from hosts h
  left join items i on i.hostid = h.hostid
  left join functions f on f.itemid = i.itemid
  left join triggers t on t.triggerid = f.triggerid
  left join events e on e.objectid = t.triggerid
) x
where rn = 1

顺便说一句,如果您使用了LEFT JOIN后续连接的表,也应该使用LEFT JOIN.

于 2019-11-28T15:05:50.717 回答