I have a table Metadata with columns code,revno and idno. revno will be unique. Same idno may exist for multiple revisions. Now my requirement is, For a set of given revno, I need to query the previous revno uniquely if available as grouped. Picture 1 contains data. if 3,4 & 7 are query revnos, then previous revno I need to get as in picture 2 as grouped. For 3 we get 1, because idno & code matches to it. For 4 we get null, because no previous data exists for idno 2 & code Person. For 7 we get 6 because, idno 2 & code Animal matches.
Advertisement
Answer
You can use a CTE to generate the highest revno prior to the current revno with the same idno and code, and then select the rows from the CTE which are the ones you want:
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
Output
REVNO PREV 3 1 4 null 7 6

