Выборка последнего значения из выборки для каждого члена выборки ORACLE SQL
Есть таблицы st и LOG и dc.
Связаны по полю id_document - идентификатор документа в базе. В st и dc значения id_document уникальны, в log - не уникальны.
Необходимо выводить: поля из dc, st.dateend, последнюю строку из столбца log.desc, отсортированного по полю log.dateevent, для каждого значения id_document таблицы sendtitle, log.dateevent строки log.desc.
Сейчас пришел только к запросу, выводящему все строки log.desc для каждого st.id_document, а как выбрать только последнюю строку не понятно.
Буду признателен за помощь.
SELECT
dc.id_document,
dc.comments,
st.dateend,
log.description,
log.dateevent
FROM
dc
JOIN log ON log.id_document = dc.id_document
JOIN st ON st .id_document = dc.id_document
WHERE
dc.id_document in (
SELECT
DISTINCT st.id_document
FROM
st
INNER JOIN document d ON d.id_document = st.id_document
WHERE
sysdate - d.timestamp > INTERVAL '4' HOUR
)
order by log.dateevent desc
Ответы (2 шт):
SELECT
*
FROM
(
SELECT
log.document_id,
MAX(log.dateevent) AS dateevent
FROM
log
GROUP BY
log.document_id
) sub
JOIN log ON (
log.id_document = sub.id_document AND
log.dateevent = sub.dateevent
)
JOIN dc ON sub.id_document = dc.id_document
JOIN st ON st.id_document = dc.id_document
Список полей для выборки укажете самостоятельно.
Если пара (log.id_document, log.dateevent) не уникальна, то получите несколько записей
а как выбрать только последнюю строку не понятно
Так и написать - надо последнюю, по ихнему LAST:
select dc.*, st.dateend, log.description, log.dateevent
from dc
join st on st.id_document = dc.id_document
join (
select id_document,
max (description) keep (dense_rank last order by dateevent asc) description,
max (dateevent) keep (dense_rank last order by dateevent asc) dateevent
from log l
group by l.id_document) log on log.id_document = st.id_document
order by dc.id_document
На тестовых данных (см. fiddle) ожидаю получить описание "description 3" от 03.07.
Так и есть:
ID_DOCUMENT COMMENTS DATEEND DESCRIPTION DATEEVENT
----------- --------- ------------------- ------------- -------------------
1 comment 1 15.07.2021 00:00:00 description 3 03.07.2021 00:00:00