Ответ 1
Использовать аналитическую/ранжирующую/оконную функциональность - ссылку на документацию 8.4:
WITH summary AS (
SELECT t.*,
ROW_NUMBER() OVER(ORDER BY t.published_date) AS position
FROM TABLE t)
SELECT s.*
FROM summary s
WHERE s.id = 65
Альтернативный вариант без синтаксиса WITH
:
SELECT s.*
FROM (SELECT t.*,
ROW_NUMBER() OVER(ORDER BY t.published_date) AS position
FROM TABLE t) s
WHERE s.id = 65
Столбец position
будет целочисленным значением, представляющим местоположение записи, где значение id
равно 65, на основе столбца published_date
в порядке возрастания. Если вы хотите, чтобы значение позиции дублировалось при наличии связей, замените ROW_NUMBER()
на RANK()