[征集]分组取最大N条记录方法征集,及散分(新年,升星)

ACMAIN_CHM IT  2009-12-31 04:30:37
加精
2009 的最后一天,升了一颗星,同时也祝大家新年快乐。

由于技术版不能散分。所以在此征集 <分组取最大N条记录>

create table t2 (
id int primary key,
gid char,
col1 int,
col2 int
) engine=myisam;

insert into t2 values
(1,'A',31,6),
(2,'B',25,83),
(3,'C',76,21),
(4,'D',63,56),
(5,'E',3,17),
(6,'A',29,97),
(7,'B',88,63),
(8,'C',16,22),
(9,'D',25,43),
(10,'E',45,28),
(11,'A',2,78),
(12,'B',30,79),
(13,'C',96,73),
(14,'D',37,40),
(15,'E',14,86),
(16,'A',32,67),
(17,'B',84,38),
(18,'C',27,9),
(19,'D',31,21),
(20,'E',80,63),
(21,'A',89,9),
(22,'B',15,22),
(23,'C',46,84),
(24,'D',54,79),
(25,'E',85,64),
(26,'A',87,13),
(27,'B',40,45),
(28,'C',34,90),
(29,'D',63,8),
(30,'E',66,40),
(31,'A',83,49),
(32,'B',4,90),
(33,'C',81,7),
(34,'D',11,12),
(35,'E',85,10),
(36,'A',39,75),
(37,'B',22,39),
(38,'C',76,67),
(39,'D',20,11),
(40,'E',81,36);


期望结果
1) N=1 取GID每组 COL2最大的记录
+----+------+------+------+
| id | gid | col1 | col2 |
+----+------+------+------+
| 6 | A | 29 | 97 |
| 15 | E | 14 | 86 |
| 24 | D | 54 | 79 |
| 28 | C | 34 | 90 |
| 32 | B | 4 | 90 |
+----+------+------+------+
2) N=3 取GID每组 COL2最大的3条记录
+----+------+------+------+
| id | gid | col1 | col2 |
+----+------+------+------+
| 6 | A | 29 | 97 |
| 11 | A | 2 | 78 |
| 36 | A | 39 | 75 |
| 32 | B | 4 | 90 |
| 2 | B | 25 | 83 |
| 12 | B | 30 | 79 |
| 28 | C | 34 | 90 |
| 23 | C | 46 | 84 |
| 13 | C | 96 | 73 |
| 24 | D | 54 | 79 |
| 4 | D | 63 | 56 |
| 9 | D | 25 | 43 |
| 15 | E | 14 | 86 |
| 25 | E | 85 | 64 |
| 20 | E | 80 | 63 |
+----+------+------+------+



注:
1)不限数据库,但请说明,比如 Oracle Database 10g 10.2 , MySQL 5.1.33
2) 不限方法, SQL语句,存储过程。
...全文
27150 145 2 打赏 收藏 举报
写回复
145 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
草青工作室 2012-09-07
[Quote=引用 41 楼 的回复:]


当分组后,COL2最大有重复的时候,是该都输出还是仅输出一条?
[/Quote]

还是这个思路的执行效率高,怎么才给 5 分啊~~~~
  • 打赏
  • 举报
回复
jazzee 2012-09-05
还没得要领
  • 打赏
  • 举报
回复
jinguanding 2012-04-06
推荐文章:
MySQL数据库InnoDB存储引擎Log漫游 简述:详细分析了InnoDB存储引擎Checkpoint技术,大家可以仔细研读!
  • 打赏
  • 举报
回复
panyulirong 2012-03-01
亮点不少啊
  • 打赏
  • 举报
回复
lygcw9602 2012-02-14

123456
  • 打赏
  • 举报
回复
qqalex 2012-01-11
来学习的,恭喜版主!
  • 打赏
  • 举报
回复
petrie 2011-10-25
select t2.id,t2.gid,t2.col1,t2.col2 from t2,
(select id,max(col2) from t2 group by gid) tv2
where t2.id=tv2.id
  • 打赏
  • 举报
回复
petrie 2011-10-25
只求可用分
  • 打赏
  • 举报
回复
惊鸿仙子君 2011-10-08
[Quote=引用 3 楼 zhoupuyue 的回复:]
恭喜版主!!

mysql:5.0.45-community-nt

1)
select * from t2 a
where not exists
(select 1 from t2 where gid=a.gid and col2>a.col2);

2)
select * from t2 a where
3>(select count(*) from t2 where ……
[/Quote]顶一个
  • 打赏
  • 举报
回复
fixed 2011-06-17
楼主 楼主 给第二个 答案好吗?急用呀。他们写的别人都说有BUG
  • 打赏
  • 举报
回复
顶了,必须的…………
  • 打赏
  • 举报
回复
fw5332 2011-05-27
学习~~~~~


  • 打赏
  • 举报
回复
wh19780506 2011-05-20
好像只能用程序采用多条语句才能实现。正真的要求,其实这样的几条语句很简单。
  • 打赏
  • 举报
回复
DUCK6 2011-03-02
http://topic.csdn.net/u/20110302/19/cc6699e6-d085-450c-ad6b-5e90c1f23617.html 和lz的题目差不多

查询并过滤某些相同的字段

过来学习
  • 打赏
  • 举报
回复
秋韩 2011-02-25
[Quote=引用 3 楼 zhoupuyue 的回复:]
恭喜版主!!

mysql:5.0.45-community-nt

1)
select * from t2 a
where not exists
(select 1 from t2 where gid=a.gid and col2>a.col2);


[/Quote]
这个可以解释下吗?
  • 打赏
  • 举报
回复
slipper520 2010-11-24
学习一下!!!!
  • 打赏
  • 举报
回复
Ivy_napoloan 2010-11-22
非常感谢17楼
  • 打赏
  • 举报
回复
anysun56 2010-11-16
very good
  • 打赏
  • 举报
回复
hechao19867187 2010-03-31
[Quote=引用 16 楼 dqlmj2009 的回复:]

呵呵,学习中。。。。
mysql5.1.41
期望结果
1) N=1 取GID每组 COL2最大的记录
SELECT a.id,a.gid,a.col1,a.col2
FROM t2 as a,t2 as b
where a.gid=b.gid AND a.col2 <=b.col2
GROUP BY a.id,a.gid,a.col1,a.col2
having a.col2>……
[/Quote]

我用mysql 几乎都运行了,就这个是正确的
  • 打赏
  • 举报
回复
WALLW1986 2010-03-30
每天回帖即可获得10分可用分! 这是真的吗?
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
MySQL
加入

5.5w+

社区成员

MySQL相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2009-12-31 04:30
社区公告
暂无公告