51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2785|回复: 9
打印 上一主题 下一主题

请教sql语句

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-12-11 22:22:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教:表如下,要求将每个框号相同的最小的两个槽位查找出来
框号  槽位
0          0
0          1
1          2
2          1
2          2
2          3
…    …
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2008-12-11 23:26:30 | 只看该作者
select top 2 min(槽位),框号 form 表 group by 框号

不知道对不对,仅供参考哈~
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2020-8-11 08:18
  • 签到天数: 114 天

    连续签到: 1 天

    [LV.6]测试旅长

    3#
    发表于 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伪列来做

    貌似我以前问过类似的题目。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
     楼主| 发表于 2009-1-5 15:36:20 | 只看该作者
    多谢。。。
    就是这样的。。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    5#
    发表于 2009-1-11 21:49:02 | 只看该作者
    select top 2 槽位 from 表 group by 框号,槽位 order by 框号,槽位

    这样也可以哦
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    6#
    发表于 2009-2-27 15:29:48 | 只看该作者
    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楼的答案和三楼的答案综合在了一起~~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2009-3-5 17:15:04 | 只看该作者
    难点在最小的2个数...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 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 tb  a 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 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9#
    发表于 2010-10-24 14:55:27 | 只看该作者
    以上答案我都在oracle里验证了,怎么不对啊?楼上的可否详细解析一下啊,谢谢了!在oracle里怎么实现??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10#
    发表于 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 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-24 06:07 , Processed in 0.087098 second(s), 27 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表