有这样一个表:里面有三个字段:座位、姓名和呼叫时间。不同的人在不同的时间可以座在不同的座位,而且在任何时刻都可以按座位上的呼叫器,因此,记录就可能如下表座位   姓名   呼叫时间
01    张三    5:00
01    李四    7:00
02    张三    7:00
02    王五    8:00问:
我如何设计一条SQL语句,去检索每个座位最后一次呼叫的详细信息?
上面的检索结果应该是座位   姓名   呼叫时间
01    李四    7:00  
02    王五    8:00  

解决方案 »

  1.   

    select 座位 ,姓名 ,呼叫时间 from(
    select 座位 ,姓名 ,呼叫时间, row_number(partition by 座位 order by 呼叫时间 desc) rn
    ) where rn=1
      

  2.   

    ……错了
    select 座位 ,姓名 ,呼叫时间 from(
    select 座位 ,姓名 ,呼叫时间,
    row_number() over(partition by 座位 order by 呼叫时间 desc) rn
    ) where rn=1
      

  3.   

    select t.* from tb t where 呼叫时间 = (select max(呼叫时间) from tb where 座位 = t.座位)select t.* from tb t where not exists (select 1 from tb where 座位 = t.座位 and 呼叫时间 > t.呼叫时间)
      

  4.   

    select * from table where (座位,呼叫时间) in (select 座位,max(呼叫时间) from table group by 座位);
      

  5.   

    我最终的方法为SELECT *
    FROM 呼叫表 CT
    WHERE NOT EXIST (
        SELECT *
        FROM 呼叫表 CD
        WHERE CT.座位=CT.座位 AND CT.呼叫时间<CD.呼叫时间);