【问题标题】:SQL - request with five tableSQL - 请求五个表
【发布时间】:2019-11-28 14:55:03
【问题描述】:

我在 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 中:

【问题讨论】:

  • 哪个版本的 MariaDB? 10.2、旧版还是新版?
  • 我使用 10.4.6-MariaDB

标签: sql mariadb mariadb-10.4


【解决方案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

【讨论】:

  • 使用的方法(Window Function for analytical queries)是正确的,但预期结果与样本数据不符@sdgrhjgh
  • 是否可以请求请求?
  • @sdgrhjgh 请详细说明。请求是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2013-12-08
  • 2016-09-13
相关资源
最近更新 更多