Search code examples
sqloracleanalytic-functions

ORA-00904: "PREV_TEMP": invalid identifier with LAG function


Whats is wrong with this query?

It returns: ORA-00904: "PREV_TEMP": invalid identifier

SELECT Id, RecordDate, Temperature, LAG(Temperature) OVER (ORDER BY RecordDate) as prev_temp
FROM Weather
WHERE Temperature > prev_temp;

SQL schema:

Create table If Not Exists Weather (Id int, RecordDate date, Temperature int)
Truncate table Weather
insert into Weather (Id, RecordDate, Temperature) values ('1', '2015-01-01', '10')
insert into Weather (Id, RecordDate, Temperature) values ('2', '2015-01-02', '25')
insert into Weather (Id, RecordDate, Temperature) values ('3', '2015-01-03', '20')
insert into Weather (Id, RecordDate, Temperature) values ('4', '2015-01-04', '30')

Solution

  • You cannot use directly, but need to use in a subquery to be able to use the returning value from analytic function

    SELECT *
      FROM
      (
       SELECT Id, RecordDate, Temperature, 
              LAG(Temperature) OVER (ORDER BY RecordDate) as prev_temp
         FROM Weather
      )
      WHERE Temperature > prev_temp;