2

我在价格表中有一组数据:

身份证日期价格
1 01/01/2001 100
2 01/02/2001 100
3 01/03/2001 200
4 01/04/2001 200
5 01/05/2001 300
6 01/06/2001 300
7 01/07/2001 100
9 01/08/2001 100
10 01/09/2001 200
20 01/10/2001 100


我只想获取价格变化的记录:

身份证日期价格
1 01/01/2001 100
3 01/03/2001 200
5 01/05/2001 300
7 01/07/2001 100
10 01/07/2001 200
20 01/10/2001 100

我怎样才能在 SQL 中做到这一点,只有一个查询。谢谢!

MySQL脚本:

创建表价格(
  id int(11) NOT NULL AUTO_INCREMENT,
  日期日期不为空,
  价格 int(11) 非空,
  主键(id)
) 引擎=InnoDB;

插入价格(id,日期,价格)
值(1,'2001-01-01',100),
(2,'2001-01-02',100),(
3,'2001-01-03',200),
(4,'2001-01-04',200),
(5,'2001-01-05',300),
(6,'2001-01-06',300),
(7,'2001-01-07',100),
(9,'2001-01-08',100),
(10,'2001-01-09',200),
(20,'2001-01-10',100);

4

2 回答 2

1

试试这个:

SELECT * FROM prices 
WHERE id in (
    SELECT p.id from prices p 
    LEFT JOIN prices p1 
    ON (p1.id = (select max(id) from prices pp where pp.id < p.id)) 
    WHERE p.price != p1.price OR p1.price is null
);
于 2013-05-09T08:30:14.197 回答
0

您将被要求在自我表上使用左连接。

SELECT * FROM prices 
WHERE id in (
    SELECT p2.id from prices p2 
    LEFT JOIN prices p3 
    ON (p3.id = (select max(id) from prices p4 where p4.id < p2.id)) 
    WHERE p2.price != p3.price OR p2.price is null
);

试试sqlfiddle

于 2013-05-09T09:26:25.863 回答