MySQL - 将更改从一个表插入到另一个表

标签 mysql sql select join insert

我有一个简化的表格:

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      

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

最佳答案

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

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

关于MySQL - 将更改从一个表插入到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231205/

相关文章:

PHP/Mysql - 动态选择数据?

MySQL 查询 : select all the books a user has completed reviewing

mysql - SQL 查询以获取结果集最后一行中所有列值的总和以及行总和(分组依据)

mysql - 全团订购

MySQL 内部连接失败

MySQL查询最近30天按天排序

php - 是否可以从输入类型的结果中选择列

c# - 主异常/碰撞检查

php - 按 'most relevent' 排序结果 - MYSQL 和 PHP

php - 用户可以在他们的个人资料描述中使用 html、css、javascript、php 等