SQL - запрос с пятью таблицами
У меня есть пять таблиц в базе данных mariadb, я хочу выбрать последнее значение каждой таблицы имен,
ht tps://stackru.com/images/0fc8b95705f8bb36b16f055f83e1fe410d7cd2a2.png
я делаю эту команду 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:
ht tps://stackru.com/images/5159edfa5c53a9739f52a29c7c690164ad6a9f21.png
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
.