I have a table like this
and here is the log table
So as you understood, my main table contains data from a source every day. But keeps only those with changes. Thus if everyday if 100k records comming normally, but very few (<100) are really has some changes. Thus my table tracks all the records using the log ID
So when I required to extract latest data or for any date this query works well
select * from (select pcode,description,T.logid,extractiondate,dense_rank() over(partition by pcode order by extractiondate desc) rn from @temp T inner join @logs L on L.logid=T.logid where L.extractiondate<=(select max(extractiondate) from @logs))tbl where rn=1 order by extractiondate desc
So if I specify a date instead of max, I can get that days data. there is no issue.
But I have got one more requirement. Instead of date if I specify LogId, how can I achieve the same using logId.
I know I can work it using getting the Date corresponding to a log Id and supply it to my above query. But I am trying to get the same in a better way using LogId. Please help
Here is the fiddle
Advertisement
Answer
Were you attempting to do this?
select *
  from (
       select pcode, description, T.logid, extractiondate
            , dense_rank() over (partition by pcode order by extractiondate desc) rn
         from temp  T
         join logs  L
           on L.logid = T.logid
        where L.extractiondate <= (select MAX(extractiondate) from logs WHERE logid = 8)
       ) tbl
 where rn = 1
 order by extractiondate desc
;
Note: We don’t need MAX if logid is unique in logs.
See: Test case adjusted
						

