SELECT *
FROM (
SELECT *, LAG(stop) OVER (ORDER BY start) AS start_anarchy, start AS stop_anarchy
FROM (
SELECT *
FROM reigns
UNION ALL
VALUES (NULL::INTEGER, NULL::INTEGER)
) q
) q
WHERE start_anarchy IS DISTINCT FROM stop_anarchy
Здесь также будут показаны годы до первого и после последнего линейки.
Из исходной таблицы я снова пытаюсь получить выходную таблицу, в которой я бы имелстолетия в первом столбце и во втором столбце среднее время всех людей, ответственных за этот век.
SELECT TRUNC(start - 1, -2) AS century, AVG(stop - start) AS avg_reign
FROM q
GROUP BY
TRUNC(start - 1, -2)
Века рассчитываются в соответствии с началом царствования, и 00
годы - это последние годы предыдущих веков (например, Constantine II
будет IX
веком короля).