假设我有表 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 如何写?
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 如何写?
(select a, min(c) c from t group by a ) t2
where t.a=t2.a and t.c=t2.c
我首先是要找对于每个 a,c 最小的项目;
而你的是找对于每个 a, b,c 最小的项目。
-- 试试看
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
(select a,min(c) as c from ttest0804 group by a ) w
where t.a=w.a and t.c=w.c
而你的是找对于每个 a, b,c 最小的项目。
你找的只是c最小的!!!!只是分组不同而已啊。
2楼怎么不对呢!
select a,b,c from t where c in (select min(c) from t ) group by a,b,c order by a
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
select a,b,c from t where c in (select min(c) from t) order by a
直接把 SELECT 换成 DELETE 后
提示
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '*' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: 't2' 附近有语法错误。