Ho cercato il sito per assistenza ma ancora in difficoltà. Ecco la mia tabella:Selezionare il record più recente nella tabella (campo datetime)
messages ======== id thread_id user_id subject body date_sent
In sostanza, voglio recuperare l'ultimo record per ogni thread_id. Ho provato il seguente:
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
MA mi sta dando i record più vecchi, non i più nuovi!
Chi può consigliare?
EDIT: Tabella discarica:
-- -- 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: Scuse - forse ho preso le cose un po 'confuso qui - in fondo quello che voglio è quello di recuperare tutti i messaggi per un determinato user_id, quindi trovare l'ultimo messaggio (per thread_id) da quei messaggi recuperati.
E 'il tipo di ordinamento che è il problema o è la selezione della registrazione più vecchia per ogni utente piuttosto che il più nuovo? – ChrisF
Seleziona il record più vecchio anziché il più recente. L'ordine BY funziona correttamente. – GSTAR
Sareste in grado di fornire un dump della tabella in questione con alcuni valori precompilati in modo che possa testare la mia query su di esso. Penso di avere un modo molto più semplice di usare una subquery scalare e di non utilizzare tutti i join incrociati di gruppo ecc. – andrew