Skip to content
Advertisement

How to find difference between the integers ignoring null values

Data looks like this

Row CurrentPrice    PriceChangeDate  PreviousPrice
1   7.9              25/03/2022      null
2   null             25/03/2022      null
3   7.9              24/03/2022      null
4   8                01/03/2022      8.5
5   8.5              24/02/2022      8

Expected Output

Row CurrentPrice    PriceChangeDate  PreviousPrice  Difference
1   7.9             25/03/2022       7.9            0
2   7.9             24/03/2022       8              0.1
3   8               01/03/2022       8.5            0.5
4   8.5             24/02/2022       8              -0.5

I am not able to find a way to get the expected data.

Advertisement

Answer

Consider below approach

select *, round(PreviousPrice - CurrentPrice, 2) as Difference
from (
  select * except(PreviousPrice), 
    ifnull(PreviousPrice, lag(CurrentPrice) over(order by PriceChangeDate)) as PreviousPrice
  from your_table
  where not CurrentPrice is null
)           

if applied to sample data in y our question – output is

enter image description here

User contributions licensed under: CC BY-SA
1 People found this is helpful
Advertisement