Я искал сайт для помощи, но все еще борется. Вот мой стол:Выберите последнюю запись в таблице (поле даты и времени)
messages ======== id thread_id user_id subject body date_sent
В основном я хочу получить самую последнюю запись для каждого потока_ид. Я пробовал следующее:
SELECT id, thread_id, user_id, subject, body, date_sent
FROM messages
WHERE user_id=1 AND date_sent=(select max(date_sent))
GROUP BY thread_id
ORDER BY date_sent DESC
НО, но это дает мне самые старые записи, а не новейшие!
Любой, кто может посоветовать?
EDIT: Таблица свалка:
-- -- Table structure for table `messages` -- CREATE TABLE IF NOT EXISTS `messages` ( `id` int(10) unsigned NOT NULL auto_increment, `thread_id` int(10) unsigned NOT NULL, `user_id` int(10) unsigned NOT NULL, `body` text NOT NULL, `date_sent` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ; -- -- Dumping data for table `messages` -- INSERT INTO `messages` (`id`, `thread_id`, `user_id`, `body`, `date_sent`) VALUES (1, 1, 1, 'Test Message', '2011-01-20 00:13:51'), (2, 1, 6, 'Test Message', '2011-01-20 01:03:50'), (3, 1, 6, 'Test Message', '2011-01-20 01:22:52'), (4, 1, 6, 'Test Message', '2011-01-20 11:59:01'), (5, 1, 1, 'Test Message', '2011-01-20 11:59:22'), (6, 1, 6, 'Test Message', '2011-01-20 12:10:37'), (7, 1, 1, 'Test Message', '2011-01-20 12:10:51'), (8, 2, 6, 'Test Message', '2011-01-20 12:45:29'), (9, 1, 6, 'Test Message', '2011-01-20 13:08:42'), (10, 1, 1, 'Test Message', '2011-01-20 13:09:49'), (11, 2, 1, 'Test Message', '2011-01-20 13:10:17'), (12, 3, 1, 'Test Message', '2011-01-20 13:11:09'), (13, 1, 1, 'Test Message', '2011-01-21 02:31:43'), (14, 2, 1, 'Test Message', '2011-01-21 02:31:52'), (15, 4, 1, 'Test Message', '2011-01-21 02:31:57'), (16, 3, 1, 'Test Message', '2011-01-21 02:32:10'), (17, 4, 6, 'Test Message', '2011-01-20 22:36:57'), (20, 1, 6, 'Test Message', '2011-01-20 23:02:36'), (21, 4, 1, 'Test Message', '2011-01-20 23:17:22');
EDIT: Извинения - я, возможно, есть вещи немного запутанные здесь - в основном то, что я хочу, чтобы получить все сообщения для данного user_id, а затем найти самое последнее сообщение (на thread_id) из полученных сообщений.
ли порядок сортировки, что проблема или это выбрать самую старую запись для каждый пользователь, а не самый новый? – ChrisF
Он выбирает самую старую запись, а не самую новую. ORDER BY работает нормально. – GSTAR
Вы могли бы предоставить дамп рассматриваемой таблицы с некоторыми предварительно заполненными значениями, чтобы я мог проверить свой запрос на нем. Я думаю, что у меня гораздо проще использовать скалярный подзапрос и не использовать все групповые перекрестные соединения и т. Д. – andrew