2

価格表に一連のデータがあります。

ID 日付 価格
1 2001/01/01 100
2 2001/02/01 100
3 2001/03/01 200
4 2001/04/01 200
5 2001/05/01 300
6 2001/06/01 300
7 2001/07/01 100
9 2001/08/01 100
10 2001/09/01 200
20 2001/10/01 100


価格が変化するレコードのみを取得したい:

ID 日付 価格
1 2001/01/01 100
3 2001/03/01 200
5 2001/05/01 300
7 2001/07/01 100
10 2001/07/01 200
20 2001/10/01 100

SQLでそれを行うにはどうすればよいですか。1つのクエリのみです。ありがとう!

MySQL スクリプト:

CREATE TABLE の価格 (
  id int(11) NOT NULL AUTO_INCREMENT,
  日付日付NOT NULL、
  価格 int(11) NOT NULL,
  主キー (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

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 に答える