假设我有表 t
a b c
1 m 1
1 m 2
1 m 3
1 n 1
1 n 2
1 n 3
2 m 1
2 m 2
2 m 3
2 n 1
2 n 2
2 n 3
现在我用分组筛选对于每个 a,c 最小的项目
select a, min(c) from t group by a order by a
运行结果为:
a min(c)
1 1
2 1
现在我想找出所有满足这个条件,并且b字段任意的数据,如下所示
a b c
1 m 1
1 n 1
2 m 1
2 n 1
请问完整的 sql 如何写?

解决方案 »

  1.   

    select a, b, min(c) from t group by a,b order by a,b 
      

  2.   

    select t.* from t,
    (select a, min(c) c from t group by a ) t2
    where t.a=t2.a and t.c=t2.c
      

  3.   

    你的方法不行。
    我首先是要找对于每个 a,c 最小的项目;
    而你的是找对于每个 a, b,c 最小的项目。
      

  4.   


    -- 试试看 
    select t.* from t 
       inner join (select a, min(c) as c from t group by a ) t2 
       on t.a = t2.a and t.c = t2.c 
      

  5.   

    select t.* from ttest0804  t,
    (select a,min(c) as c from ttest0804 group by a )   w
    where t.a=w.a and t.c=w.c
      

  6.   

    我首先是要找对于每个 a,c 最小的项目; 
    而你的是找对于每个 a, b,c 最小的项目。 
    你找的只是c最小的!!!!只是分组不同而已啊。
    2楼怎么不对呢!
      

  7.   

    这个可以吧.
    select a,b,c from t where  c in (select  min(c) from t ) group by a,b,c order by a
      

  8.   

    declare @t table(a int, b varchar(10),c int) 
    insert @t select 1, 'm', 1 
    insert @t select 1, 'm', 2 
    insert @t select 1, 'm', 3 
    insert @t select 1, 'n', 1 
    insert @t select 1, 'n', 2 
    insert @t select 1, 'n', 3 
    insert @t select 2, 'm', 1 
    insert @t select 2, 'm', 2 
    insert @t select 2, 'm', 3 
    insert @t select 2, 'n', 1 
    insert @t select 2, 'n', 2 
    insert @t select 2, 'n', 3
    select t.* from @t t ,(select a ,max(c)as c from @t group by a) t1
    where t.a=t1.a and t.c=t1.c
      

  9.   

    或许是下面这句:
    select a,b,c from t where  c in (select  min(c) from t)  order by a
      

  10.   

    select t.* from test a ,(select a,min(c) as from test group by a) w where a.a=w.a and a.c=w.c
      

  11.   

    再请教一个问题,我想把找到的这些数据删除,该如何做呢?
    直接把 SELECT 换成 DELETE 后
    提示
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: '*' 附近有语法错误。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 't2' 附近有语法错误。