0

ここで、テストするテーブルをいくつか作成しました。

CREATE TABLE IF NOT EXISTS `test` (
  `index` varchar(255) NOT NULL,
  `index2` varchar(255) NOT NULL,
  `date` date NOT NULL,
  `somenumber` int(10) NOT NULL,
  PRIMARY KEY (`index`,`index2`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `test` (`index`, `index2`, `date`, `somenumber`) VALUES
('kevin', 'little', '2013-06-11', 1),
('kevin', 'little', '2013-07-03', 5),
('maria', 'smith', '2013-07-01', 3),
('martin', 'luther', '2013-07-04', 13),
('martin', 'luther', '2013-07-05', 14);

今、すべての人に最新 のを入手したいと思います。somenumber注文はsomenumber DESCです。これが私の試みです:

SELECT * FROM `test` GROUP BY `index`, `index2` ORDER BY `somenumber` DESC

問題は、このクエリが常にすべてのグループに対して 1 つの数値を取得することですが、常に最新であるとは限りません。

(ここではインデックス名があまり意味をなさないことは知っていますが、乱数インデックスを使用するよりも読みやすい例だと思いました)

4

2 に答える 2

2

これを試して:

SELECT t1.`INDEX`, t1.`INDEX2`, t1.`SOMENUMBER` FROM TEST t1 INNER JOIN
(SELECT `INDEX`, `INDEX2`, MAX(`DATE`) DATE FROM TEST
GROUP BY `INDEX`, `INDEX2`) t2 ON t1.INDEX = t2.INDEX AND t1.INDEX2 = t2.INDEX2 AND t1.DATE = t2.DATE
于 2013-07-05T09:41:22.650 に答える