Right now this code is doing what it needs to do. I just feel like that the function LAG
should have an easier way to take basically OFFSET=-1
, which is not possible so I have to resort to the current code. What I do not like is that is every time I need this functionality I need to add 2 lines: 1 in the SELECT
statement, 1 in the ORDER BY
statement. Is there a cleaner way to achieve the same result in 1 line?
I do not care if LAG
is replaced by another function, I am just interested in the final result being the same.
WITH mytable AS (
SELECT * FROM (
VALUES
(7),
(6),
(5),
(4)
) AS t (time)
)
SELECT time,
LAG(time) OVER (ORDER BY time ASC) AS lagged_time
FROM mytable
ORDER BY time DESC
CodePudding user response:
LAG(time) OVER (ORDER BY time ASC)
== LEAD(time) OVER (ORDER BY time DESC)
. An ORDER BY
clause is the only method to ensure output is sorted as needed. You must include the clause if a specific ordering is requried.