2017-05-04 25 views
0

您好,我正在處理審計數據,我在表中有以下數據。如何從審計表中獲得舊值和新值

colm1 colm2 colm3 

f1  50  4/5/2017 3.38 

f1  70  4/5/2017 3.40 

f1  80  5/5/2017 3.40 

f1  30  5/5/2017 5.40 

我想顯示時間和內容表中的 所需的輸出

colm1 oldvalue newvalue date 

f1  50   70  4/5/2017 

f1  70   80  5/5/2017 

f1  80   30  5/5/2017 
+0

如何修改的內容?通過前端或SQL中的更新語句? – Chendur

+0

標記您正在使用的dbms。解決方案可能是產品特定的。 – jarlh

+0

@Chendur它的審計表,更改是通過觸發插入或更新 –

回答

0

爲此,您可以改爲使用lag()

select a.colm1, a.colm2 as newvalue, 
     lag(colm2) over (partition by colm1 order by colm3) as prevvalue, 
     colum3 
from audit a; 

如果你想只有三排:

select a.* 
from (select a.colm1, a.colm2 as newvalue, 
      lag(colm2) over (partition by colm1 order by colm3) as prevvalue, 
      colum3 
     from audit a 
    ) a 
where prevvalue is not null; 
+0

謝謝你的工作 –

+0

如果我想要滯後更多的一列?可以說我有column4我想要colm2和colm4的兩個值 –

+0

@AvuthuBhargavaReddy。 。 。然後你會添加更多'lag()'表達式。 –

0
;With cte(colm1 ,colm2,colm3) 
AS 
(
SELECT 'f1', 50 ,'4/5/2017 3.38' Union all 
SELECT 'f1', 70 ,'4/5/2017 3.40' Union all 
SELECT 'f1', 80 ,'5/5/2017 3.40' Union all 
SELECT 'f1', 30 ,'5/5/2017 5.40' 
) 
SELECT colm1,Val AS OldValue,colm2 AS newvalue,colm3 From 
(
SELECT colm1 ,colm2,LAG(colm2)OVER(order by colm3)Val,LEFT(colm3,8)colm3 from cte 
)dt 
WHERE dt.Val iS NOT NULL 

輸出

colm1 OldValue newvalue colm3 
---------------------------------------- 
f1  50   70   4/5/2017 
f1  70   80   5/5/2017 
f1  80   30   5/5/2017 
+0

感謝隊友也嘗試過這也是它的工作 –

+0

@AvuthuBhargavaReddy只要它解決了您的要求就沒事了! – 2017-05-04 12:55:32

+0

如果我想要滯後多列,該怎麼辦?可以說我有column4我想要colm2和colm4的值 –