问题:表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.classin的效率低
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.classselect class,name,date from (
select class,name,date,row_number() over(partition by class order by date) rn
from test
)
where rn <=30SELECT 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中大家有没有做过测试?实际效果是不是差得很大?这么老的帖子都还没有结账?

