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.

Другие вопросы по тегам