需求:有一个聊天记录表,如下
id    from    to     message        timeline
1        a       h      xxxxxxxx       10:24:35
2        c       h      xxxxxxxx       10:26:20
3        h       a      xxxxxxxx       10:30:56
4        c       h      xxxxxxxx       10:32:27
5        a       h      xxxxxxxx       10:35:25
6        h       c      xxxxxxxx       10:42:45
7        h       b      xxxxxxxx       10:45:32我现在只知道h,我想查出来  每个人   和  h   聊天的最后两条记录,应该怎么写查询语句。

解决方案 »

  1.   

    这种情况很多地方都遇到过,有时候总想偷懒一个语句想搞定
    但有个比较麻烦的方法,虽然麻烦,但思路清晰,写个proc,
    cursor=select ... from group by from,to  order by timeline
    while()
        if cursor.from 同一个from已经出现两次,就这行记录不处理,但前两条记录要保存下来。此处省略逻辑部分,只讲思路
        cursor.next()
      

  2.   

    能够单条语句搞定确实显示sql的功底,但是不是所有问题都有必要一条语句搞定的。
    写起来难,维护也难。
      

  3.   

    参考 六、按name分组取最大的两个(N个)valSELECT 
        X.*
    FROM
        TB X
    WHERE
        2 > (SELECT 
                COUNT(*)
            FROM
                TB
            WHERE
                TB.from = X.from AND TB.to = X.to
                    AND timeline > X.timeline)
    ORDER BY X.fro , timeline;