一个典型的SQL查询问题

来源:百度知道 编辑:UC知道 时间:2024/05/31 22:35:50
我这里查询SQL语句通常有这样一种情况,相信大家也遇到过.
假设我有一张表(t1),数据如下:
col1 col2 col3
d1 a 1
d1 b 6
d2 c 2
d2 d 7
d3 a 3
d3 k 5
要求抽取每个col1的第一条数据.
即:
d1 a 1
d2 c 2
d3 a 3
不知道大家有没有好办法?
发现提供的参考数据有些不妥,
1.col3的数据请忽略.
2.数据库是MSSQL SERVER 2000
3.换句话说,就是按col1分组,抽取col2中最小的记录

谢谢各位的回答,可以看出思路都是从分组着手.
虽然有一些朋友的语句取值不准确,但是只要稍微修改,即可使用,
这应该是我描述不准确,产生了歧义.

huzi01245的语句最符合我的需要.
就是分数少了点(本人就这么点儿家底了,呵呵!),

select a.* from test1 a,test1 b
where a.col1=b.col1
group by a.col1,a.col2,a.col3
having a.col3=min(b.col3)

select a.* from t1 a,
(select col1,min(col3) col3 from t1 group by col1) b
where a.col1=b.col1
and a.col3=b.col3

--------补充--------
col3忽略是什么意思?

那直接
select col1,min(col2) col2 from t1 group by clo1

增加一个ID字段,ID为主键
select col1,col2,col3 from t1 a where id in (select top 1 id from t1 b where a.col1=b.col1 order by col1)

一楼不对

二楼不错,但是rowid好像只用于oracle吧

题目说的不清楚,
每个COL1的第一条数据,
那么选择时候这张表的COL3是升序排列吗?

都错
SELECT *
FROM (SELECT co1,col2,col3 ROWNUM AS col4 FROM scott.emp1)
WHERE col4 IN (SELECT MIN(ROWNUM) FROM t1 GROUP BY col1)