Запрос на получение предыдущего значения для группы чисел - PullRequest
0 голосов
/ 06 мая 2020

У меня есть таблица метаданных с кодом столбцов, revno и idno. ревно будет уникальным. Один и тот же идентификатор может существовать для нескольких ревизий. Теперь мое требование: для набора заданных revno мне нужно однозначно запросить предыдущее revno, если оно доступно как сгруппированное. Рисунок 1 содержит данные. если 3,4 и 7 являются запросами revnos, то предыдущее revno мне нужно получить, как на рисунке 2, как сгруппированные. Для 3 мы получаем 1, потому что idno и код ему соответствуют. Для 4 мы получаем null, потому что для idno 2 и кода Person не существует предыдущих данных. Для 7 мы получаем 6, потому что idno 2 и код Animal совпадают.

Pic 2

enter image description here

1 Ответ

3 голосов
/ 06 мая 2020

Вы можете использовать CTE для генерации наивысшего revno перед текущим revno с теми же idno и code, а затем выбрать строки из CTE, которые вам нужны:

WITH CTE AS (
  SELECT revno, 
         LAG(revno) OVER (partition BY idno, code ORDER BY revno) AS prev
  FROM Metadata
)
SELECT *
FROM CTE
WHERE revno IN (3, 4, 7)
ORDER BY revno

Вывод

REVNO   PREV
3       1
4       null
7       6

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...