免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2480 | 回复: 11
打印 上一主题 下一主题

超级难SQL语句,查遍手册,束手无策,请教各位了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-30 15:27 |只看该作者 |倒序浏览
超级难SQL语句,查遍手册,束手无策,请教各位了
表的数据如下:
id     name     expert     Time
1      test1        liu         2006-09-26 13:38:01
2      test2        li           2006-09-26 13:38:30
3      test3        ya         2006-09-26 13:38:50
4      test4        zhong   2006-09-26 13:39:14
5      test5        liu         2006-09-26 13:39:30
....等等数据
expert是专家,time,发言的时间
现在我要查expert,发言的时间最近但是排第二(时间倒叙),并找此专家最近(最新)的3条记录。
寒,把我给整晕了,请教各位了

论坛徽章:
0
2 [报告]
发表于 2006-10-01 02:16 |只看该作者
简单举例:

SQL> desc test4
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
NAME                                               VARCHAR2(20)
EXPERT                                             VARCHAR2(20)
R_DATE                                             DATE

SQL> select * from test4
  2  /

NAME                 EXPERT               R_DATE                                
-------------------- -------------------- -------------------                  
sh                   huang                2006-09-29 08:10:44                  
an                   li                   2006-09-29 08:11:00                  
sh                   huang                2006-09-29 08:11:04                  
an                   li                   2006-09-29 08:11:08                  
sh                   huang                2006-09-29 08:11:12                  
an                   li                   2006-09-29 08:11:15                  
sh                   huang                2006-09-29 08:11:19                  
an                   li                   2006-09-29 08:11:22                  

8 rows selected.

SQL> l
  1  select name,expert,r_date from
  2     (select name,expert,r_date from
  3              (select ta.name,ta.expert,ta.r_date from test4 ta,
  4                      (select name,expert,rownum t_num from
  5                             (select name,expert from test4 order by r_date desc)
  6                          where rownum<3) tb
  7                   where ta.expert=tb.expert and tb.t_num=2)
  8              order by r_date desc
  9     )
10*    where rownum<3

result:

NAME                 EXPERT               R_DATE                                
-------------------- -------------------- -------------------                  
sh                   huang                2006-09-29 08:11:19                  
sh                   huang                2006-09-29 08:11:12

论坛徽章:
0
3 [报告]
发表于 2006-10-01 07:21 |只看该作者
select *
from test4
where expert in (select expert from (select expert from test4 order by R_DATE  desc) where rownum=2)
order by r_date desc

论坛徽章:
0
4 [报告]
发表于 2006-10-04 11:25 |只看该作者
没有优化,只是把功能实现了
  1. select * from (
  2.     select * from test_t
  3.     where expert in (
  4.           select expert from (
  5.                  select idx, expert from (
  6.                         select rownum idx, expert from test_t
  7.                         order by time desc
  8.                  )
  9.                  where rownum < 3 order by idx
  10.           ) where rownum < 2
  11.        )
  12.     order by time desc
  13. ) where rownum < 4
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-10-04 11:26 |只看该作者
w3231717 的肯定没有测试

论坛徽章:
0
6 [报告]
发表于 2006-10-06 00:04 |只看该作者
如果数据量很大有什么快一点的方法?

论坛徽章:
0
7 [报告]
发表于 2006-10-06 08:47 |只看该作者
确保 time上有index
expert 上 最好有index


  1. select  * from test4 a,
  2. (select  expert from (
  3. select /*+index_desc(a test_time_inx)*/ expert,rownum as r
  4. from test4 a
  5. where time is not null
  6. and rownum <= 2
  7. ) where r = 2
  8. )
  9. b
  10. where a.expert=b.expert
  11. /

复制代码

test_time_inx 是 time上的index,一定要写对……

[ 本帖最后由 rollingpig 于 2006-10-6 08:56 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2006-10-07 12:08 |只看该作者
厉害,楼主也不谢一声!?

论坛徽章:
0
9 [报告]
发表于 2006-10-08 10:51 |只看该作者
像expert in(...),要是重复的2条怎么办?
你们过滤了没有?

论坛徽章:
0
10 [报告]
发表于 2006-10-08 10:54 |只看该作者
我的需求比这还要复杂些
dense_rank() over(partition by EXPERTID order by ANSWERTIME DESC)
这都用到了还是解决不了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP