有个短信通信表 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

解决方案 »

  1.   

    只列出两个而已
    select * from msg where id in (7,3) order by id esc;
      

  2.   

    SELECT * FROM MSG WHERE msgfrom = '8001' OR msgto = '8001' ORDER BY  createtime LIMIT 0,N
    这个SQL可以取到最新的联络记录,N是取几条
      

  3.   

    select id,msgfrom
    ,msgto,msg,createtime
    from msg
    where 
    msgfrom='8001' or msgto='8001'
    order by createtime;
      

  4.   

    SELECT * FROM msg A WHERE NOT EXISTS(SELECT 1 FROM msg WHERE 
    A.msgfrom=msgfrom AND A.createtime<createtime)
      

  5.   

    不好意思刚弄明你要干什么,应该是下边这个。没测试,但思路应该正确
    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 
      

  6.   

    select * from msg m
    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)
      

  7.   


       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  8.   

    select * from msg where msgfrom=8001 or msgto=8001 order by createtime;