私は次の構造を持っています:
CREATE TABLE IF NOT EXISTS `myTable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`time` int(11) NOT NULL,
`item` varchar(255) NOT NULL,
`price` int(11) NOT NULL,
PRIMARY KEY (`ID`),
KEY `time` (`time`),
KEY `item` (`item`),
KEY `price` (`price`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;
INSERT INTO `myTable` (`ID`, `time`, `item`, `price`) VALUES
(1, 100, 'cat', 10),
(2, 101, 'cat', 10),
(3, 102, 'cat', 9),
(4, 103, 'cat', 11),
(5, 104, 'cat', 10),
(6, 105, 'cat', 10),
(7, 106, 'cat', 11);
次を返すクエリを見つけようとしています。
time item price
---- ---- -----
100 cat 10
102 cat 9
103 cat 11
104 cat 10
106 cat 11
時間順に並べられ、価格がその前の価格と異なる行のみが表示されます (編集: *時間に応じて*)。
編集:
元の問題を単純化しすぎたのかもしれませんが、次のようなデータでもっと複雑だったらどうなるでしょうか。
INSERT INTO `myTable` (`ID`, `time`, `item`, `price`) VALUES
(1111, 100, 'cat', 10),
(21, 105, 'cat', 10),
(31, 108, 'cat', 9),
(411, 109, 'cat', 11),
(512, 110, 'cat', 10),
(61, 114, 'cat', 10),
(72, 120, 'cat', 11),
(8, 100, 'dog', 20),
(93, 102, 'dog', 20),
(104, 108, 'dog', 29),
(111, 109, 'dog', 31),
(122, 155, 'dog', 20),
(13, 165, 'dog', 20),
(1445, 172, 'dog', 31);
上記では、ID 列がすべてめちゃくちゃになっており、間に他のレコードが存在する可能性があります。また、時間が 1 ずつ増えなくなり、犬をミックスに投入しました。