本帖最后由 tianxueer 于 2012-03-02 10:20:33 编辑

解决方案 »

  1.   

    对不起,笔误,应该是:
    -----------------------------------------------------------------------
    比如现在我输入:1,在from和to里面一共含有1的记录有三组,id分别是:10和20,30和40,50和60
    取最新的,所以最后应该返回:20,40,60请大家针对需求,讨论一下,有没有高效快速的sql实现,谢谢!
      

  2.   

    最新的标准是什么
    FROM 、TO 交叉?
      

  3.   


    只要from和to二者中有一个含有我传入的数字,就认为这条数据符合要求,
    然后再按照from和to分组,分组时from和to没有顺序,即:id为10和20的两条记录可以分为一组
    最后再取得每组中id最大的那一条记录
      

  4.   

    即:id为10和20的两条记录可以分为一组:为什么,因为FROM 、TO 交叉?
      

  5.   


    因为from和to是通信双方,id为10的记录是1发送给2的,id为20的记录是2发送给1的,发信人和收信人都是这两个人,所以分为一组
      

  6.   

    select min(id) from table_name where `from`=1 or `to`=1 group by `from`,`to`;  这个意思?
      

  7.   

    错了。是取大的哦。改成这样:select max(id) from table_name where `from`=1 or `to`=1 group by `from`,`to`;
      

  8.   

    SELECT * FROM ttj a LEFT JOIN ttj b ON a.`from`=b.`to` AND a.`to`=b.`from`
    WHERE b.`id`<a.`id`
      

  9.   

    select max(id)
    from (
    select from,to,id
    from 数据示例
    union all
    select to,from,id
    from 数据示例
     ) t
     where from=1
     group by from,to
      

  10.   


    当我再插一条记录如下:
    id      from      to
    70        1        2
    这时候就不行了
      

  11.   

    当我再插一条记录如下:
    id             from             to
    70                 1                 2
    这时候就不行了 
      

  12.   

     数据要有代表性
    SELECT DISTINCT MAX(id) FROM (
    SELECT   id,a.`from`,a.`to` FROM   ttj   a
      UNION ALL
      SELECT   id,a.to,a.from  FROM   ttj   a) a GROUP BY `from`,`to`
      

  13.   

    or
    SELECT nf,nt,MAX(id) FROM (
    SELECT a.id,IF(a.`from`>b.`from`,b.`from`,a.`from`) AS nf ,
    IF(a.`to`<b.`to`,b.`to`,a.`to`) AS nt
     FROM ttj a LEFT JOIN ttj b ON a.`from`=b.`to` AND a.`to`=b.`from`
    WHERE b.`id`<a.`id`) a GROUP BY nf,nt
      

  14.   

    WWWWA 和 ACMAIN_CHM 两位的都不错,非常感谢!具体实现时,我想这么做:
    增加一列flag,内容是:CONCACT(min(from, to), '_', max(from, to))
    然后GROUP BY flag
    这样就不需要UNION ALL 了,效率上会有提升。我这么做只是针对具体应用,话说二位的sql还是非常棒的,谢谢!