2016-05-04 43 views
0

我有一个表如何获取2个的1列的数据到行2列

create table abc (id integer, value varchar(20), date1 date); 

数据是:

insert into abc values (1 , a, '2015-02-01'); 
insert into abc values (1 , b, '2015-02-02'); 
insert into abc values (1 , c, '2015-02-03'); 

我要像结果:

old value || new value || updated date 
a   || b  || 2015-02-02 
b   || c   || 2015-02-03 

我该如何得到这个结果?

+0

你的问题不清楚。你从哪里获得新/旧价值?是否有人在输入新记录时更新其他表? –

+0

是的,无论何时在表中输入记录的日期都是新记录,而前一个记录是旧记录。 –

+0

你应该在sql中使用触发器来做到这一点。发生插入时触发插入。 –

回答

0

DB2的OLAP功能可以帮助在这里:

select id, 
     lag(value) over (partition by id order by date1) as "old value", 
     value as "new value", 
     date1 as "updated date" 
from abc 

我想你可能还需要返回的ID列作为另一个ID你只需要它的新旧价值。 这个查询也会返回额外的第一行,这也可能会有帮助。如果你想避免它(如你所示)使用以下SQL

with temp as (
select id, 
     lag(value) over (partition by id order by date1) as "old value", 
     value as "new value", 
     date1 as "updated date" 
from abc) 
select * from temp 
    where "old value" is not null 
0

的分选和内组合加入

SELECT 
old.value as "old value", 
new.value as "new value", 
new.date1 as "updated date" 
FROM abc AS OLD 
INNER JOIN abc as new 
WHERE old.id = new.id 
AND new.date1 = ( 
    SELECT MIN(date1) FROM abc 
    WHERE old.id = id 
    AND date1 > old.date1 
) 

see SQL Fiddle