12
返回列表 发新帖
楼主: shmhms2015

SQL取得某字段最大值及过滤重复记录

[复制链接]
论坛徽章:
241
至尊黑钻
日期:2015-09-25 14:27:26粉钻
日期:2015-10-16 10:53:36紫钻
日期:2015-10-16 10:53:21红钻
日期:2015-09-25 15:05:50黄钻
日期:2015-10-17 12:23:40绿钻
日期:2015-10-24 10:29:30至尊黑钻
日期:2015-08-14 13:24:07粉钻
日期:2015-10-24 10:30:07紫钻
日期:2015-11-03 22:32:09红钻
日期:2015-11-06 17:21:40
11#
发表于 2015-8-11 09:27 | 只看该作者
用这个sql语句试试
select a.* from table1 a where g in(select max(a.g) from (select d,max(f) bf from table1 group by d) b left join table1 a on a.d=b.d and a.f=b.bf  group by a.d,a.f
)

使用道具 举报

回复
论坛徽章:
0
12#
 楼主| 发表于 2015-8-11 10:00 | 只看该作者
本帖最后由 shmhms2015 于 2015-8-11 10:04 编辑
佚名是译名 发表于 2015-8-11 09:02
你这需求也真够怪的,我用游标试试。
select * from table1 as a   
where  f=(select max(b.f)  
                  from table1 as b  
                  where a.d = b.d and a.e=b.e
                  );
这个SQL可以得到5条记录。如果再写一个SQL,用Group by或别的,能筛选出当d,e,f三个字段相同时的记录,就可以了。SELECT d,e,MAX(f) AS ID
FROM table1
GROUP BY d,e

这样可以得到三条记录,但我想select * ,显示所有字段,但不行。

使用道具 举报

回复
论坛徽章:
241
至尊黑钻
日期:2015-09-25 14:27:26粉钻
日期:2015-10-16 10:53:36紫钻
日期:2015-10-16 10:53:21红钻
日期:2015-09-25 15:05:50黄钻
日期:2015-10-17 12:23:40绿钻
日期:2015-10-24 10:29:30至尊黑钻
日期:2015-08-14 13:24:07粉钻
日期:2015-10-24 10:30:07紫钻
日期:2015-11-03 22:32:09红钻
日期:2015-11-06 17:21:40
13#
发表于 2015-8-11 10:04 | 只看该作者
shmhms2015 发表于 2015-8-11 10:00
select * from table1 as a   
where  f=(select max(b.f)  
                  from table1 as b  

看我后面的那个sql语句

使用道具 举报

回复
论坛徽章:
0
14#
 楼主| 发表于 2015-8-11 10:07 | 只看该作者
佚名是译名 发表于 2015-8-11 09:02
你这需求也真够怪的,我用游标试试。

SELECT d,e,MAX(f) AS ID
FROM table1
GROUP BY d,e
这样也可以,但只差一步。目的就是过滤d,e,f相同的记录,只是我想select *,显示所有字段。现在只能显示三个字段。

使用道具 举报

回复
论坛徽章:
241
至尊黑钻
日期:2015-09-25 14:27:26粉钻
日期:2015-10-16 10:53:36紫钻
日期:2015-10-16 10:53:21红钻
日期:2015-09-25 15:05:50黄钻
日期:2015-10-17 12:23:40绿钻
日期:2015-10-24 10:29:30至尊黑钻
日期:2015-08-14 13:24:07粉钻
日期:2015-10-24 10:30:07紫钻
日期:2015-11-03 22:32:09红钻
日期:2015-11-06 17:21:40
15#
发表于 2015-8-11 10:12 | 只看该作者
本帖最后由 佚名是译名 于 2015-8-11 14:18 编辑
shmhms2015 发表于 2015-8-11 10:07
SELECT d,e,MAX(f) AS ID
FROM table1
GROUP BY d,e

通过字段g来查询,g是主键,不存在相同数据,我在11楼的回复能满足你的需求。
select a.* from table1 a where g in(select max(a.g) from (select d,max(f) bf from table1 group by d) b left join table1 a on a.d=b.d and a.f=b.bf  group by a.d,a.f
)

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2015-8-11 13:12 | 只看该作者
其实就是取f最大值时,过滤掉d,e,f相同的记录,只剩下三条。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表