Если вы используете Oracle DB 12c+
, то вы можете использовать без необходимости использовать дополнительный подзапрос через предложение FETCH
с параметром 1 ROW ONLY
вместе с предложением ORDER BY
, включая LEAD()
analyti c функционирует как
LEAD(inrunningdelay_1) OVER ( PARTITION BY writer ORDER BY written_1 )
начиная со значения zero
для
ABS( inrunningdelay_1 - LEAD(inrunningdelay_1) OVER ( PARTITION BY writer ORDER BY written_1 ) )
путем использования абсолютного значения для разности
SELECT t.*
FROM t
ORDER BY ABS( inrunningdelay_1 - LEAD(inrunningdelay_1)
OVER ( ORDER BY written_1 ) )
FETCH FIRST 1 ROW ONLY
Демо
Обновление: PARTITION BY writer
будет избыточным в вышеуказанном случае, так как это будет работать только для одного автора, как упомянул Теджа sh. Для нескольких писателей рассмотрим следующий оператор Select:
WITH t2 AS
(
SELECT t.*,
ABS( inrunningdelay_1 - LEAD(inrunningdelay_1)
OVER ( PARTITION BY writer ORDER BY written_1 ) ) as ld
FROM t
ORDER BY writer, ld, written_1
)
SELECT written_1, writer, inrunningdelay_1
FROM t2
ORDER BY ROW_NUMBER() OVER ( PARTITION BY writer ORDER BY ld )
FETCH FIRST 1 ROW WITH TIES
, где вы бы отфильтровали только zero
возвращаемых значений, а затем выбрали бы only first возвращено для каждого автора с помощью функции ROW_NUMBER()
analyti c в самом глубоком предложении ORDER BY
:
Демонстрация 2