Тъй като Джон Ву поясни, че не е насочено, ето новия ми отговор:
изберете *от msgsListwhere (най-малко(msg_from, msg_to), най-голямо(msg_from, msg_to), msg_time) в ( изберете най-малко(msg_from, msg_to) като x, най-голямо(msg_from, msg_to) като y, max( msg_time) като msg_time от група msgsList по x, y);
Изход:
<предварителен код>| MSG_ID | MSG_FROM | MSG_TO | MSG | MSG_TIME |------------------------------------------------ ------------------------| 1 | 1 | 2 | здравей | 23 януари 2010 г. 17:00:00-08:00 || 5 | 1 | 3 | аз също | 23 януари 2012 г. 00:15:00-0800 || 6 | 3 | 2 | здравей | 23 януари 2012 г. 01:12:12-0800 |За този вход:
създайте таблица msgsList( msg_id int, msg_from int, msg_to int, msg varchar(10), msg_time datetime); вмъкнете в msgslist VALUES(1, 1, 2, 'здравей', '2010-01-23 17:00:00'), -- показано(2, 2, 1, 'свят', '2010-01-23 16:00:00'), (3, 3, 1, 'жив съм', ' 2011-01-23 00:00:00'),(4, 3, 1, 'наистина', '2011-01-22 23:15:00'), (5, 1, 3, 'аз също', '2012-01-23 00:15:00'), -- показано(6, 3, 2, 'здравей', '2012-01-23 01:12:12'); -- показано
SQLPiddle Демо
Ако ANSI SQL е вашата чаша чай, ето как да го направите:http://sqlfiddle .com/#!2/0a575/19
изберете *от msgsList z, където съществува (изберете null от msgsList, където най-малко(z.msg_from, z.msg_to) =най-малко(msg_from, msg_to) и най-голямо(z.msg_from, z.msg_to) =най-голямо(msg_from) , msg_to) групирайте по най-малко(msg_from, msg_to), най-голямо(msg_from, msg_to) с max(msg_time) =z.msg_time );