babysnail 发表于 2008-12-11 22:22:56

请教sql语句

请教:表如下,要求将每个框号相同的最小的两个槽位查找出来
框号槽位
0          0
0          1
1          2
2          1
2          2
2          3
…    …

smart55 发表于 2008-12-11 23:26:30

select top 2 min(槽位),框号 form 表 group by 框号

不知道对不对,仅供参考哈~

puchonghui 发表于 2008-12-14 09:58:59

lz是想得到这样的结果么?
0          0
0          1
1          2
2          1
2          2


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:20

多谢。。。
就是这样的。。。

Nicle 发表于 2009-1-11 21:49:02

select top 2 槽位 from 表 group by 框号,槽位 order by 框号,槽位

这样也可以哦:loveliness:

木可 发表于 2009-2-27 15:29:48

5楼的答案看不懂,3楼的答案貌似有问题。当要将几张表连接在一起查询时,我们才会用where table1.主键=table2.外键
只有一张表的时候用 where where t.框号=框号 貌似还没见过。
我的答案是:
select 框位 from tablename as t where 槽位 in (selecttop 2 槽位 from t order by 槽位)group by 框位

感觉是吧2楼的答案和三楼的答案综合在了一起~~~:lol

fflastjay 发表于 2009-3-5 17:15:04

难点在最小的2个数...

fflastjay 发表于 2009-3-6 16:32:27

愚见:
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 tba where 槽位 in (select top 2 槽位 from tb b where a.框号=b.框号 order by 槽位)

用where a.xx = b.xx 和有几张数据表没有关系,关键看你的思路

所以3楼答案是对的,而且相信楼主也在sql里测试过了,我刚刚也在office access里测试过了

[ 本帖最后由 fflastjay 于 2009-3-6 16:35 编辑 ]

kitty.xiong 发表于 2010-10-24 14:55:27

以上答案我都在oracle里验证了,怎么不对啊?楼上的可否详细解析一下啊,谢谢了!在oracle里怎么实现??

fhqyygytjh 发表于 2010-11-26 18:08:42

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;
页: [1]
查看完整版本: 请教sql语句