关于分组搜寻的SQL语句问题

myperry 2003-10-26 11:10:47
关于分组搜寻的SQL语句问题

数据表内容如下:
MI_ID aaa bbb ccc ddd
1001 A100 M001 1.20 09/01/2003
1002 A100 M001 1.50 09/10/2003
1003 A100 M001 1.38 09/25/2003
1004 A200 M002 2.10 09/15/2003
1005 A200 M002 2.20 09/20/2003
1006 A200 M005 6.50 09/23/2003
1007 A200 M005 6.70 09/21/2003

搜寻出aaa,bbb两个字段内容相同的那一组记录中日期最大的那一笔记录。
也就是希望如下的结果:
MI_ID aaa bbb ccc ddd
1003 A100 M001 1.38 09/25/2003
1005 A200 M002 2.20 09/20/2003
1006 A200 M005 6.50 09/23/2003

请问这个SQL语句如何写?
...全文
39 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gmlxf 2003-10-27
  • 打赏
  • 举报
回复
select * from @你的表 tem where ddd=(select max(ddd) from @你的表 where aaa=tem.aaa and bbb=tem.bbb) order by mi_id
这个效率高些,所需查询次数少多。
LoveSQL 2003-10-27
  • 打赏
  • 举报
回复
select * from @你的表 tem where ddd=(select max(ddd) from @你的表 where aaa=tem.aaa and bbb=tem.bbb) order by mi_id
dafu71 2003-10-27
  • 打赏
  • 举报
回复
select * from 表 tem where not exists(select 1 from 表 where tem.ddd<ddd and aaa=tem.aaa and bbb=tem.bbb)
pengdali 2003-10-27
  • 打赏
  • 举报
回复
呵呵。。

in 是多余,max只返回一个值。 用=就可以了。其实你试试就知道了。in是用在有多值的情况下。
txlicenhe 2003-10-27
  • 打赏
  • 举报
回复
Select * from tableName a
Join
(Select aaa,bbb,max(ddd) as ddd group by aaa,bbb) b
on a.aaa=b.aaa and a.bbb = b.bbb and a.ddd = b.ddd

myperry 2003-10-26
  • 打赏
  • 举报
回复
pengdali(大力 V3.0) 与 gmlxf(烛光)的方法都可以,谢谢你们。

请问以上两种方法在执行效率上是否相同?各有什么优劣之处?
gmlxf 2003-10-26
  • 打赏
  • 举报
回复
或者:
select * from @你的表 tem where ddd in (select max(ddd) from @你的表 group by aaa,bbb) order by mi_id
pengdali 2003-10-26
  • 打赏
  • 举报
回复
举例:

declare @你的表 table(MI_ID int,aaa varchar(10),bbb varchar(10),ccc numeric(10,2),ddd datetime)
insert @你的表 values(1001,'A100','M001', 1.20 ,'09/01/2003')
insert @你的表 values(1002,'A100','M001', 1.50 ,'09/10/2003')
insert @你的表 values(1003,'A100','M001', 1.38 ,'09/25/2003')
insert @你的表 values(1004,'A200','M002', 2.10 ,'09/15/2003')
insert @你的表 values(1005,'A200','M002', 2.20 ,'09/20/2003')
insert @你的表 values(1006,'A200','M005', 6.50 ,'09/23/2003')
insert @你的表 values(1007,'A200','M005', 6.70 ,'09/21/2003')

select * from @你的表 tem where ddd=(select max(ddd) from @你的表 where aaa=tem.aaa and bbb=tem.bbb) order by mi_id


/*

MI_ID aaa bbb ccc ddd
----------- ---------- ---------- ------------ ------------------------------------------------------
1003 A100 M001 1.38 2003-09-25 00:00:00.000
1005 A200 M002 2.20 2003-09-20 00:00:00.000
1006 A200 M005 6.50 2003-09-23 00:00:00.000

(所影响的行数为 3 行)

*/
pengdali 2003-10-26
  • 打赏
  • 举报
回复
select * from 表 tem where ddd=(select max(ddd) from 表 where aaa=tem.aaa and bbb=tem.bbb)

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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