现在有一个video表,里面有id,title,type,time等列名,现要根据time排序选出每种type的前10个记录,SQL语句如何写呢?

解决方案 »

  1.   

    http://www.w3school.com.cn/sql/sql_top.asp 请说明你使用的数据库
      

  2.   

    select * from video group by type order by time asc limit 0,10;
      

  3.   


    SELECT * FROM video t WHERE 10 > (SELECT COUNT( * ) FROM video WHERE type=t.type AND id<t.id ) ORDER BY time
      

  4.   

    他要按time排序选,而且应该是倒序(虽然他没说),所以我猜是SELECT * 
    FROM video t 
    WHERE 10 > (
                  SELECT COUNT( * ) 
                  FROM video 
                  WHERE type=t.type 
                    AND time>t.time 
                ) 
    ORDER BY type, time desc
      

  5.   

    hehe,思路就是这样啦,应用看需求如果数据库支持ROW_NUMBER,会有更好效率的用法
      

  6.   

    请在回复之前认真看一下需求 选出每种type的前10个记录
      

  7.   

    好像误会我的意思了,我是说每种type的前10个记录,比如有type1,type2,type3三种类型,那么就选出type1的前十条+type2的前十条+type3的前十条,总共三十条。
      

  8.   


    哦。看懂了。每种 type ? 的我不会写。
    坐等高手。
      

  9.   

    有这么个例子
    查询EMP 员工表下每个部门工资前二名的员工信息select deptno, ename, sal
    from emp e1
    where
    (select count(1)
    from emp e2
    where e2.deptno=e1.deptno and e2.ename!=e1.ename and e2.sal>e1.sal)
    <2
    order by deptno, sal desc;楼主看看思路是不是一致
      

  10.   

    就是对每一行,
    看和这行同一类型(type=t.type)的行中,
    比本行新(time>t.time)的是否小于10个( 10>...count(*) ),
    如果小于10个,就是"每种type的前10个记录",否则,就不是
      

  11.   


    感谢回复,开始还是没完全理解,专门建了一个表,执行了下看看,基本明白了
    可能改成这样会更好理解下
    SELECT *  
    FROM video t  
    WHERE (
      SELECT COUNT( * )  
      FROM video  
      WHERE type=t.type  
      AND ttime>t.ttime  
      ) <10
    ORDER BY type, ttime desc就是说从表的第一行开始,以当前行为基准,查找所有同类型的,并且时间比当前行新的记录数,看是否小于10,如果大于等于10,那说明当前行不在同类型的最新10条记录之内,就不是我们要的数据,反之,如果小于10,说明,当前行也在同类型的最新的10条记录之内,就是我们需要的数据,应该是这样的吧。
      

  12.   

    非常感谢各位大神,鄙人实在惭愧,helloyou0的答案就是我要的。但是因为没有看懂,所以被搁置了。反而blizzf99自己建表去实践了,这种学习态度让我实在惭愧。