如何分组并取得最新值

eion 2011-12-28 04:49:54
有这样一个表:里面有三个字段:座位、姓名和呼叫时间。不同的人在不同的时间可以座在不同的座位,而且在任何时刻都可以按座位上的呼叫器,因此,记录就可能如下表

座位 姓名 呼叫时间
01 张三 5:00
01 李四 7:00
02 张三 7:00
02 王五 8:00

问:
我如何设计一条SQL语句,去检索每个座位最后一次呼叫的详细信息?
上面的检索结果应该是

座位 姓名 呼叫时间
01 李四 7:00
02 王五 8:00
...全文
109 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
eion 2012-02-17
  • 打赏
  • 举报
回复
我最终的方法为

SELECT *
FROM 呼叫表 CT
WHERE NOT EXIST (
SELECT *
FROM 呼叫表 CD
WHERE CT.座位=CT.座位 AND CT.呼叫时间<CD.呼叫时间);
xiaobn_cn 2011-12-29
  • 打赏
  • 举报
回复
select * from table where (座位,呼叫时间) in (select 座位,max(呼叫时间) from table group by 座位);
dawugui 2011-12-28
  • 打赏
  • 举报
回复
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.呼叫时间)
xpingping 2011-12-28
  • 打赏
  • 举报
回复
……错了
select 座位 ,姓名 ,呼叫时间 from(
select 座位 ,姓名 ,呼叫时间,
row_number() over(partition by 座位 order by 呼叫时间 desc) rn
) where rn=1

xpingping 2011-12-28
  • 打赏
  • 举报
回复
select 座位 ,姓名 ,呼叫时间 from(
select 座位 ,姓名 ,呼叫时间, row_number(partition by 座位 order by 呼叫时间 desc) rn
) where rn=1

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧