有个短信通信表 msg
id msgfrom msgto msg createtime
1 8001(我) 8002 你好 2013-06-24 16:07
2 8001(我) 8002 你在吗 2013-06-24 16:13
3 8002 8001(我) nihao 2013-06-24 16:20
4 8001(我) 8003 HELLO 2013-06-25 10:07
5 8003 8001(我) HEHE 2013-06-25 15:07
6 8003 8001(我) 哈哈 2013-06-25 18:21
7 8001(我) 8003 哈哈 2013-06-25 19:21 从表msg中查询出我与其他人通信的最新记录,例如下表。当然有1000多个人在短信通信,这里只列出两个而已
id msgfrom msgto msg createtime
7 8001(我) 8003 哈哈 2013-06-25 19:21
3 8002 8001(我) nihao 2013-06-24 16:20 请问要查询出这样的结果,该怎么写SQL语句,我非常痛苦,恳求各位高手能给我个能实现上述效果的SQL语句,谢谢各位了!SQL
id msgfrom msgto msg createtime
1 8001(我) 8002 你好 2013-06-24 16:07
2 8001(我) 8002 你在吗 2013-06-24 16:13
3 8002 8001(我) nihao 2013-06-24 16:20
4 8001(我) 8003 HELLO 2013-06-25 10:07
5 8003 8001(我) HEHE 2013-06-25 15:07
6 8003 8001(我) 哈哈 2013-06-25 18:21
7 8001(我) 8003 哈哈 2013-06-25 19:21 从表msg中查询出我与其他人通信的最新记录,例如下表。当然有1000多个人在短信通信,这里只列出两个而已
id msgfrom msgto msg createtime
7 8001(我) 8003 哈哈 2013-06-25 19:21
3 8002 8001(我) nihao 2013-06-24 16:20 请问要查询出这样的结果,该怎么写SQL语句,我非常痛苦,恳求各位高手能给我个能实现上述效果的SQL语句,谢谢各位了!SQL
select * from msg where id in (7,3) order by id esc;
这个SQL可以取到最新的联络记录,N是取几条
,msgto,msg,createtime
from msg
where
msgfrom='8001' or msgto='8001'
order by createtime;
A.msgfrom=msgfrom AND A.createtime<createtime)
SELECT *
FROM MSG
INNER JOIN (
SELECT MAX(T1.ID) AS MAXID
FROM(
SELECT
ID,
CASE WHEN(MSGFROM='8001',MSGTO,MSGFROM) AS OTHER,
FROM MSG
WHERE MSGFROM = '8001' OR MSGTO = '8001'
) T1
GROUP BY T1.OTHER
) T2 ON MSG.ID =T2.MAXID
where (msgfrom='8001(我)' or msgto='8001(我)')
and not exists (select 1 from msg where msgfrom='8001(我)' and msgto=m.msgto and createtime>=m.createtime)
and not exists (select 1 from msg where msgto='8001(我)' and msgfrom=m.msgfrom and createtime>=m.createtime)
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。