解决方案 »

  1.   

    楼上的答案是不对的
    sort<>t.sort这个条件不对
    假设已经存在一个这样的组,张三》李四》周六》李八
    虽然张三和周六曾经在一个组呆过,但他们没有发生过讲话
    楼上的答案也会将这个组判断成讲过话
      

  2.   


    1楼的abs(sort-t.sort)=1 这样呢?
      

  3.   

    我认为楼主提供的是[谈话组分配表], 需要建立一张[谈话记录表],
    这张表包含了:ID 、谈话者userid 、被谈话者userid 、谈话时间
    当符合谈话规则(同一TeamId ,当谈话者@Sort<>Max(Sort) 时,被谈话者Sort =谈话者@Sort +1,当谈话者@Sort=Max(Sort) 时,被谈话者Sort=Min(Sort) )的两个userid 谈话后,记录到[谈话记录表]
    然后在[谈话记录表]中的纪录即为谈过话的
      

  4.   

    @sc273607742,
    abs(sort-t.sort)=1不完全对,因为在一个组中,如果两个人是一头一尾谈过话,Sort不是1的关系
      

  5.   

    @zhendemo_13,
    你的方法我也想过,但如果不借住另外的表,有没有方法来解决呢
      

  6.   

    我解释一下一头一尾
    TeamId UserId UserName Sort
    1         39         张三         1
    1         56         李四         2
    1         22         王五         3
    上述数据中,王五和张三谈过话,但Sort相差是2,而不是1
      

  7.   

    SELECT TOP 1 userid
      FROM (
               SELECT t.userid,
                      t_next.username as nextuser,
                      t_first.username as firstuser
                 FROM tab t
            LEFT JOIN tab t_next
                   ON t_next.teamid=t.teamid
                  AND t_next.sort=t.sort+1
            LEFT JOIN tab t_first
                   ON t_first.teamid=t.teamid
                  AND t_first.sort=1
                WHERE t.username = '张三'
           ) T
      WHERE nextuser = '周六'
         OR (    nextuser IS NULL
             AND firstuser = '周六'
            )
      

  8.   


    用case when  如果是这个组最大的sort  就取0 否则就sort
      

  9.   

    @sc273607742,
    如何case when,能写SQL看看吗
      

  10.   


    用1楼的sql改了改 select * from tab t
    where username='张三' and exists(select 
    * from tab tb where teamid=t.teamID and username='王五' and (abs(sort-t.sort)=1 or
    (t.Sort-case when tb.Sort=(select MAX(sort) from tab where TeamId=tb.TeamId) then 0 else tb.Sort end)=1 or
    (tb.Sort-case when t.Sort=(select MAX(sort) from tab where TeamId=t.TeamId) then 0 else t.Sort end)=1 
    ))