oracle 多表查询,计算台席利用率。小弟,在线等高手解决!

lxxlql 2009-10-20 11:18:33
登陆历史表

工作时间表

用户表

台席表

大厅表

需求:


计算利用率后,联合查询显示,改台席详细信息




...全文
174 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
unicom_desk 台席表
id
name 名字
hall_id 外键,大厅
user_id 外键,用户

unicom_hall 大厅表
id
name

unicom_login_history 登陆历史表
id
user_id
login_time 登陆时间
logout_time 下线时间

unicom_work 工作时间表
id
user_id
desk_id
start_time
end_time
work_time

unicom_user 用户表
id
name
需求:
c.name 台席,d.name 大厅,count(b.desk_id)台席办理业务次数,count(a.user_id) 登陆次数, count(b.desk_id)/count(a.user_id) 台席利用率
每周,每月,每年
iqlife 2009-10-20
  • 打赏
  • 举报
回复
图......
dawugui 2009-10-20
  • 打赏
  • 举报
回复
无图.
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
en
cosio 2009-10-20
  • 打赏
  • 举报
回复
图看不见!手工贴数据!
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
谢谢,wildvave啊
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
我看看。
小灰狼W 2009-10-20
  • 打赏
  • 举报
回复
这样?
select a.name 台席,b.name 大厅,
count(d.desk_id)台席办理业务次数,
(select count(1) from unicom_login_history where login_time>=to_date('2009-10-15','yyyy-mm-dd')
and logout_time<to_date('2009-10-22','yyyy-mm-dd')) 登录次数,
count(d.desk_id)/(select count(1) from unicom_login_history where login_time>=to_date('2009-10-15','yyyy-mm-dd')
and logout_time<to_date('2009-10-22','yyyy-mm-dd')) 台席利用率
from
unicom_desk a,unicom_hall b,unicom_work d
where a.hall_id=b.id
and a.id=d.desk_id
and d.start_time>=to_date('2009-10-15','yyyy-mm-dd') and d.start_time<to_date('2009-10-22','yyyy-mm-dd')
group by a.name,b.name
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
写个存储过程也行。
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
登陆历史表

工作时间表

用户表

台席表

大厅表

需求:

其实,我页面是根据时间为条件,查询的,比如,我查,2009-10-15到2009-10-21这段时间的,台席
利用率,还有利用率,办理业务的次数处以登陆的次数。
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
恩,好。我把图贴出来。
小灰狼W 2009-10-20
  • 打赏
  • 举报
回复
根据时间查询就在where里加上一个条件d.starttime ...
上面的代码在from后面多了一个逗号。。还是有别的错误?
还是我没理解你的意图..如果有图会好理解一些
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
一天登陆一次,可能会办理很多次业务,所以,这个利用率是大于一的。
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
大哥,我页面还要根据时间查询啊。
lxxlql 2009-10-20
  • 打赏
  • 举报
回复
wildwave,你来了啊,利用率是工作时间内办理业务次数/登陆次数。
d.start_time 报这个不在,group by 里面?

zhangwonderful 2009-10-20
  • 打赏
  • 举报
回复
6楼方法可行
小灰狼W 2009-10-20
  • 打赏
  • 举报
回复
是这样吗
select a.name 台席,b.name 大厅,
count(d.desk_id)台席办理业务次数,
(select count(1) from unicom_login_history where trunc(login_time,'iw')=trunc(d.start_time,'iw')) 登录次数,
count(d.desk_id)/(select count(1) from unicom_login_history where trunc(login_time,'iw')=trunc(d.start_time,'iw')) 台席利用率
from
unicom_desk a,unicom_hall b,,unicom_work d
where a.hall_id=b.id
and a.id=d.desk_id
group by a.name,b.name,trunc(d.start_time,'iw')

trunc里的iw改成yyyy是年,改成mm是月

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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