I would like to get the data from previous row. I have used LAG function but did not get the expected result.
Table:-
col1 col2 col3
ABCD 1 Y
ABCD
Assuming SQL Server 2012 or newer...
SELECT
*,
LAG(col3) OVER (PARTITION BY col1 ORDER BY col2) AS col4
FROM
yourTable
If you're on SQL Server 2008 or older...
SELECT
*,
(
SELECT TOP(1) previous.col3
FROM yourTable AS previous
WHERE previous.col1 = yourTable.col1
AND previous.col2 < yourTable.col2
ORDER BY previous.col2 DESC
)
AS col4
FROM
yourTable
If you are on 2008 or earlier, try this:
select t1.col1, t1.col2, t1.col3, t2.col3 as col4
from table1 t1
left join table1 t2 on t1.col1 = t2.col1 and t1.col2 - 1 = t2.col2
the lag() function is the bee's knees, though. Use that, if you can.
Use lag()
function
select *, lag(col3) over (partition by col1 order by col2) as col4
from table t;
However You can also use subquery
if your SQL
doesn't have LAG()
select *,
(select top 1 col3
from table
where col1 = t.col1 and col2 < t.col2
order by col2 desc
) as col4
from table t;
Thank you all for the replies. By using the lag function with partition I got the expected result. I missed to used partition previously and due to that I was getting wrong results.