0

我有一个简化的表格:

id     date     color
----------------------
1   2012-01-01  black
2   2012-01-02  red
3   2012-01-03  red
4   2012-01-04  red
5   2012-01-05  green

现在我需要将此表中的颜色更改插入到新表中:

   date     before   now
----------------------------
2012-01-02  black    red
2012-01-04  red      green      

有人可以告诉我怎么做吗?

4

3 回答 3

3

将第二行与上一行进行比较:

SELECT cur.date, prev.color "before", cur.color now
FROM tbl cur
LEFT JOIN tbl prev ON cur.id = prev.id + 1
WHERE cur.id > 1 -- start detecting changes from second row
     AND prev.color <> cur.color

现场测试:http ://sqlfiddle.com/#!2/0c146/1

编辑

即使在不连续的数据中也能工作。如果 MySQL 中有 CTE 功能,查询可能会更简洁

create table tbl
(
  id int, 
  date date,
  color text
);


insert into tbl(id,date,color)
select 1,'2012-1-1','black' union
select 2,'2012-1-3','red' union
select 3,'2012-1-7','red' union
select 4,'2012-1-15','red' union
select 5,'2012-1-21','green' ;


set @rx = 0;
set @ry = 0;


select cur.date, prev.color as "before", cur.color as "now"

from (select *, @ry := @ry + 1 as series from tbl order by date) as cur 
left join (select *, @rx := @rx + 1 as series from tbl order by date) as prev
on cur.series = prev.series + 1

where cur.series > 1
and prev.color <> cur.color

现场测试:http ://sqlfiddle.com/#!2/b9443/2

于 2012-04-19T15:25:30.743 回答
0

首先,重命名color列 -> before,然后添加now列(default null如果可能),然后now根据需要更新列。

于 2012-04-19T15:17:51.193 回答
0

如果我理解正确,存储过程就是您所需要的。

存储过程

于 2012-04-19T15:21:38.897 回答