求一个sql语句

kyouken2007 2010-10-28 11:58:01
表1的PK是a,b,c,d

a,b,c,d,e,f
1,1,2,1,a,a,
1,2,1,2,a,b,
1,3,1,1,b,d,
1,4,1,3,a,c,
2,1,1,2,e,f,
2,2,2,1,x,z,
2,3,1,1,w,q,

想取得
1,3,1,1,b,d,
2,3,1,1,w,q,

就是说,按a分组,b的值无视,取c最小的纪录,
如果c的最小有复数条,再取这复数条中d最小的那一条记录。

...全文
80 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyouken2007 2010-10-28
  • 打赏
  • 举报
回复
谢谢,您也太强大了。

不过这个sql文我不太理解,
受人以鱼不如授人以渔,您能给讲解一下吗?
dawugui 2010-10-28
  • 打赏
  • 举报
回复
create table tb(a int,b int,c int,d int,e varchar(10),f varchar(10))
insert into tb values(1,1,2,1,'a','a')
insert into tb values(1,2,1,2,'a','b')
insert into tb values(1,3,1,1,'b','d')
insert into tb values(1,4,1,3,'a','c')
insert into tb values(2,1,1,2,'e','f')
insert into tb values(2,2,2,1,'x','z')
insert into tb values(2,3,1,1,'w','q')
go

select t.* from tb t where not exists(select 1 from tb where a = t.a and (c < t.c or (c= t.c and d < t.d) ) )

drop table tb

/*
a b c d e f
----------- ----------- ----------- ----------- ---------- ----------
1 3 1 1 b d
2 3 1 1 w q

(所影响的行数为 2 行)
*/
dawugui 2010-10-28
  • 打赏
  • 举报
回复
select t.* from tb t where not exists(select 1 from tb where a = t.a and (c < t.c or (c= t.c and d < t.d) ) )
kyouken2007 2010-10-28
  • 打赏
  • 举报
回复
多谢~~~~~~
dawugui 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kyouken2007 的回复:]
谢谢,您也太强大了。

不过这个sql文我不太理解,
受人以鱼不如授人以渔,您能给讲解一下吗?
[/Quote]
不好用文字能描述出来,你需要先去了解not exists的用法。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧