select * from tablename as t where 槽位 in(select top 2 槽位 from t where t.框号=框号 order by 槽位)
这个仅限于sqlserver
oracle 要用rownum伪列来做
貌似我以前问过类似的题目。。。作者: babysnail 时间: 2009-1-5 15:36
多谢。。。
就是这样的。。。作者: Nicle 时间: 2009-1-11 21:49
select top 2 槽位 from 表 group by 框号,槽位 order by 框号,槽位
这样也可以哦作者: 木可 时间: 2009-2-27 15:29
5楼的答案看不懂,3楼的答案貌似有问题。当要将几张表连接在一起查询时,我们才会用where table1.主键=table2.外键
只有一张表的时候用 where where t.框号=框号 貌似还没见过。
我的答案是:
select 框位 from tablename as t where 槽位 in (select top 2 槽位 from t order by 槽位)group by 框位
感觉是吧2楼的答案和三楼的答案综合在了一起~~~作者: fflastjay 时间: 2009-3-5 17:15
难点在最小的2个数...作者: fflastjay 时间: 2009-3-6 16:32
愚见:
2楼的 select top 2 min(槽位),框号 form 表 group by 框号
top 2 min好象没有这种用法
3楼的答案正确,
select * from tablename as t where 槽位 in(select top 2 槽位 from t where t.框号=框号 order by 槽位)
但是,我不知道2个表都命名T会不会产生误解,所以整理如下:
select * from tb a where 槽位 in (select top 2 槽位 from tb b where a.框号=b.框号 order by 槽位)
[ 本帖最后由 fflastjay 于 2009-3-6 16:35 编辑 ]作者: kitty.xiong 时间: 2010-10-24 14:55
以上答案我都在oracle里验证了,怎么不对啊?楼上的可否详细解析一下啊,谢谢了!在oracle里怎么实现??作者: fhqyygytjh 时间: 2010-11-26 18:08
ORACLE 实现的话可以用下面的语句:
SELECT *
FROM table_name t1
WHERE t1.槽位 IN (SELECT t2.槽位
FROM (SELECT * FROM table_name ORDER BY 1, 2) t2
WHERE t1.框号=t2.框号
AND ROWNUM <= 2)
ORDER BY 1, 2;