RSS
热门关键字:  数据挖掘  人工智能  数据仓库  搜索引擎  数据挖掘导论

求按班级分组查询前30位报到的学生

来源: 作者: 时间:2008-02-19 点击:

问题:表test含班级,学员姓名,报到时间,要求以班级分组查出每个班前30位报到的学员
我的语句如下:(access数据库实验)

select   class,name,date   from   test   as   a
where   a.class   in
  (select   top   30   class   from   test  
      where   a.class=class   order   by   date,name   )     order   by   a.class

执行无问题,但却执行了近3分钟

求各位高人给出更好的SQL语句

感觉好像这样才能达到你的要求吧

select   class,name,date   from   test   as   a
where   a.name   in
  (select   top   30   class   from   test  
      where   a.class=class   order   by   date,name   )     order   by   a.class

in的效率低
select   class,name,date   from   test   as   a

数据挖掘研究院


jion
  (select   top   30   class   from   test  
      where   a.class=class   order   by   date,name   )   b  
where   a.class=b.class
order   by   a.class

select   class,name,date   from   (
    select   class,name,date,row_number()   over(partition   by   class   order   by   date)   rn
    from   test
)
where   rn <=30

SELECT   class,   name,   date
FROM   test   AS   a
WHERE   a.name   in
  (select   top   30   name   from   test  
      where   a.class=class   order   by   class,date)
ORDER   BY   a.class;

最好有个   学号   字段,按学号来查询,你那有问题,你试试这句用了多久?

where   a.class=class   order   by   class,date 数据挖掘研究院
是根据同班级,按第一顺序班级,第二顺序日期排列

假设   无重名   现象

數據表設置不太合理,如果有id(自動編號)字段就更好了,這樣就可以用下面語句來實現查詢要求:
select   a.class,a.name,a.date
from   test   a   where   exists(
      select   top   30   *   from   test   where   id   =   a.id   order   by   date)
order   by   a.class

这里只有ReViSion(和尚)的方法是正确的吧?大家都说用IN会引起全表扫描,影响性能,在sql   server和oracle中大家有没有做过测试?实际效果是不是差得很大?

这么老的帖子都还没有结账?

Create By Any-Extract(WL-AE) 数据挖掘研究院

上一篇:oralce技术群
下一篇:关于DataStage
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?