各位好:
       我刚刚开始接触数据库,前几天面试的时候碰到这样一个问题:一张表FIRST,表结构和数据如下图:(当时考题中没有ID这一栏,是我不知道怎么定位是第几行数据而自己加的)
题目要求是:将记录按照type的值分类,将每类中CODE的ASCⅡ的值第二大的记录查询出来。提示是表关联和const指令。
我当时想了很久,使用
select const(*),type from first group by type;能得到每类的记录数,通过表达式也能定位到第二大的记录应该是哪行。
我的问题是:
1。如何查询一张表具体到第几行的记录
2。用什么指令能将我查询出的结果作为临时表和原表关联起来。
3。原题中CODE的值是数字,比较ASCⅡ码比较简单,如果还包含字母,这个比较怎么在SQL语句中实现。
希望能得到帮助,谢谢各位。

解决方案 »

  1.   

    select * from
    (select a.*,row_num()over(partition by type order by ascii(code) as rn from t1 a) b where b.rn2
      

  2.   

    SELECT Max(a.code),a.type FROM first AS a  Left Join first AS b ON a.type = b.type AND a.code< b.code WHERE  b.code IS NOT NULL  GROUP BY a.type 
      

  3.   


    # 查找每一条记录中有相同type的所有记录,统计code大于本条记录的数量,如果只有一条记录的code大于本条记录,则本条记录的code
    # 就是第二大的,并用 exists 将本条记录筛选出来。select *
    from first as a
    where exists(select count(*) as num
                 from first
                 where a.type = type and a.code < code
                 having num = 1);
      

  4.   

    先查询出code  acsii的最大值 ,再找出所有比这个最大值小的所有code值后进行分组  再取这个组里的最大值  就是第二大的了
    select max(code) as code,type from first
          where ascii(code) < 
                     (select max(ascii(code)) from bb)
                          group by type