Skip to content
Advertisement

How to get record by Date in my case using SQL Server?

I have 2 tables ProductLog and Product

ProductLog

ProductID    TransDate    RegNo
--------------------------------
15           2022-03-05    4
15           2022-03-08    1
15           2022-03-10    3

Product

Date          ProductID
-----------------------
2022-03-01    15
2022-03-02    15
2022-03-03    15
2022-03-04    15
2022-03-05    15
2022-03-06    15
2022-03-07    15
2022-03-08    15
2022-03-09    15
2022-03-10    15
2022-03-11    15
2022-03-12    15

The select statement RegNo value to be ProductLog.RegNo , which is Product.Date <= ProductLog.TransDate

I want to get a result like below Expected Output

Date          ProductID   RegNo
-------------------------------
2022-03-01    15          4
2022-03-02    15          4
2022-03-03    15          4
2022-03-04    15          4
2022-03-05    15          4
2022-03-06    15          1
2022-03-07    15          1
2022-03-08    15          1
2022-03-09    15          3
2022-03-10    15          3
2022-03-11    15          0
2022-03-12    15          0

I tried by ranking order Date by ASC, and where rank =1, it set all to lowest date value. (I understand it is not a correct approach.)

what is the correct way to approach this?

Advertisement

Answer

use APPLY to find the RegNo

select p.Date, p.ProductID, RegNo = coalesce(l.RegNo, 0)
from   Product p
       outer apply
       (
           select top 1 l.RegNo
           from   ProductLog l
           where  l.ProductID = p.ProductID
           and    l.TransDate >= p.[Date]
           order by l.TransDate
       ) l
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement