分组查询不应该用group by吧,应该是order by 
----->
 select MOD(ROWNUM-1,a.cnt)+1,a.*
 from 
  (
  select t.nameid ,data,count(*) over(partition by t.nameid ) cnt 
  from add_mst t
  order by nameid ,data desc    '分组,时间最新
  ) a
 where MOD(ROWNUM-1,a.cnt)+1<=10
 order by nameid ,MOD(ROWNUM-1,a.cnt)+1

解决方案 »

  1.   

    修正:
    select b.* 
    from
        (
           select MOD(ROWNUM-1,a.cnt)+1 cnt2,a.*
           from 
            (
            select nameid ,data,count(*) over(partition by nameid ) cnt 
            from add_mst 
            order by nameid ,data desc    '分组,时间最新
            ) a
           order by nameid ,MOD(ROWNUM-1,a.cnt)+1
       ) b
    where b.cnt2<=10
      

  2.   

    select *
           from 
            (
            select nameid ,data,count(*) over(partition by nameid order by data desc) rn 
            from add_mst    
            ) 
            where rn<=10
      

  3.   

    count(*) over(partition by nameid order by data desc)语法过不去,是不是因为access不支持这样的sql语句,前面 licsth大哥说的方法也是count(*) over(partition by t.nameid )出现语法错误
      

  4.   

    select * from
     (
         select
             t.*,
             dense_rank() over(partition by t.nameid order by t.data desc) rank
         from
             table1 t
     ) s
     where s.rank<=10;
      

  5.   

    那你还是在后台处理吧!又是讨厌的vba项目吧?!
      

  6.   

    我把问题再叙述一下:
    就是在access中,分组取出每一组的top n(时间最新10条)。
    本来以为很简单,用group by 加上order by和top 10 组合就能解决,后来查阅group by文档,其使用有很多限制,问题实现挺难的。求大人解决
      

  7.   

    很简单的问题呀,怎么没有人回答呀,sql高手都跑哪里去了,呜呜
      

  8.   

    SQL> select * from b;        ID USERID            WEI
    ---------- ---------- ----------
             1 b                 111
             2 c                 111
             1 b                   1
             1 a                  10
             1 a                  10
             4 a                  10
             4 a                  10
             4 a                  10
             4 a                  90
             1 a                 250
             2 a                   5        ID USERID            WEI
    ---------- ---------- ----------
             3 a                  60
             1 a                   1
             1 a                   1
             4 a                  10
             1 a                   1
             1 a                   1
             1 a                   1
             1 a                   1已选择19行。SQL> select * from (select id,userid,wei,row_number() over(partition by id order
     by wei) t from b) where t<4;        ID USERID            WEI          T
    ---------- ---------- ---------- ----------
             1 b                   1          1
             1 a                   1          2
             1 a                   1          3
             2 a                   5          1
             2 c                 111          2
             3 a                  60          1
             4 a                  10          1
             4 a                  10          2
             4 a                  10          3已选择9行。SQL>
      

  9.   

    是一个相关子查询的问题,答案如下:
    select * 
    from mytable as a
    where data in(select top 10 data from mytable where nameid=a.nameid order by data)
      

  10.   

    top 10 ?这不是SQL SERVER的语法吗?