Mysql 数据分组取某字段值所有最大的记录行,mysql字段_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2397 | 回复: 0   主题: Mysql 数据分组取某字段值所有最大的记录行,mysql字段        下一篇 
刘习托
注册用户
等级:中士
经验:208
发帖:66
精华:0
注册:2011-11-23
状态:离线
发送短消息息给刘习托 加好友    发送短消息息给刘习托 发消息
发表于: IP:您无权察看 2014-11-17 14:27:18 | [全部帖] [楼主帖] 楼主

需求:

表中同一个uid(用户)拥有多条游戏等级记录,现需要取所有用户最高等级(level)的那一条数据,且时间(time)越早排越前。这是典型的排名表

+------+-------+--------------+---------------------+
| uid | level | role | time |
+------+-------+--------------+---------------------+


| 7 | 1 | 摇滚圣魔 | 2014-06-12 15:01:05 |
| 1134 | 4 | 唯我独尊 | 2014-06-12 15:02:38 |
| 1134 | 4 | 唯我独尊 | 2014-06-12 15:02:39 |
| 7 | 3 | 摇滚圣魔 | 2014-06-12 15:02:59 |
| 5 | 3 | 韵儿铃♦ | 2014-06-12 15:04:09 |
| 7363 | 6 | 诗荷冰月 | 2014-06-12 15:04:23 |
| 6684 | 4 | つ道远虚空つ | 2014-06-12 15:05:13 |
| 7 | 16 | 摇滚圣魔 | 2014-06-12 15:05:46 |
| 1 | 2 | 斗土豪 | 2014-06-12 15:05:48 |
| 7 | 26 | 摇滚圣魔 | 2014-06-12 15:08:36 |
| 6684 | 8 | つ道远虚空つ | 2014-06-12 15:08:45 |
| 5 | 12 | 韵儿铃♦ | 2014-06-12 15:09:47 |
| 6834 | 1 | 无敌追翼 | 2014-06-12 15:10:56 |
| 5 | 16 | 韵儿铃♦ | 2014-06-12 15:11:18 |
| 8719 | 1 | 君望赤 | 2014-06-12 15:11:48 |
| 6274 | 36 | 五月独孤 | 2014-06-12 15:12:22 |
| 8724 | 26 | 童童 | 2014-06-12 15:12:31 |
| 1134 | 32 | 唯我独尊 | 2014-06-12 15:12:51 |
| 7 | 26 | 摇滚圣魔 | 2014-06-12 15:13:38 |
| 5 | 25 | 韵儿铃♦ | 2014-06-12 15:14:48 |
| 7757 | 3 | つ清灵旋つ | 2014-06-12 15:16:50 |
| 7 | 26 | 摇滚圣魔 | 2014-06-12 15:17:26 |
| 5 | 28 | 韵儿铃♦ | 2014-06-12 15:18:08 |
| 7757 | 23 | つ清灵旋つ | 2014-06-12 15:19:29 |
| 6274 | 43 | 五月独孤 | 2014-06-12 15:19:54 |
| 8724 | 30 | 童童 | 2014-06-12 15:20:39 |
| 7757 | 26 | つ清灵旋つ | 2014-06-12 15:20:58 |
| 8707 | 36 | 就是干 | 2014-06-12 15:22:28 |
| 7757 | 29 | つ清灵旋つ | 2014-06-12 15:23:05 |
| 7757 | 32 | つ清灵旋つ | 2014-06-12 15:24:57 |
| 8726 | 10 | 连曦 | 2014-06-12 15:26:01 |
| 7363 | 34 | 诗荷冰月 | 2014-06-12 15:26:58 |
| 7 | 26 | 摇滚圣魔 | 2014-06-12 15:27:33 |
| 5 | 37 | 韵儿铃♦ | 2014-06-12 15:27:37 |
| 8347 | 1 | 无敌 | 2014-06-12 15:28:09 |
| 6274 | 47 | 五月独孤 | 2014-06-12 15:28:13 |
| 1 | 32 | 斗土豪 | 2014-06-12 15:29:18 |
| 1134 | 46 | 唯我独尊 | 2014-06-12 15:30:52 |
| 7757 | 41 | つ清灵旋つ | 2014-06-12 15:30:56 |
| 9 | 34 | 饭饭饭饭の | 2014-06-12 15:31:03 |
| 6274 | 48 | 五月独孤 | 2014-06-12 15:31:18 |
| 8724 | 41 | 童童 | 2014-06-12 15:32:30 |
| 7757 | 42 | つ清灵旋つ | 2014-06-12 15:34:24 |
| 1134 | 48 | 唯我独尊 | 2014-06-12 15:34:56 |
| 1100 | 2 | 圣魔霄 | 2014-06-12 15:35:54 |
| 1008 | 21 | ∵嘟嘟冰儿∵ | 2014-06-12 15:36:10 |
| 7757 | 45 | つ清灵旋つ | 2014-06-12 15:40:49 |
| 3088 | 4 | 战魂☼凌空 | 2014-06-12 15:41:38 |
| 5 | 41 | 韵儿铃♦ | 2014-06-12 15:41:56 |
| 7757 | 46 | つ清灵旋つ | 2014-06-12 15:43:24 |

实现过程:

1.首先对该数据进行2次排序,uid 排序以及等级的降序排序

2.对排序后的结果用uid进行分组,分组后等级降序排序,时间升序排序

实现SQL:

select * from (select a.uid,a.level,a.role,a.time from 数据表 a
where order BY a.uid desc,a.level desc) as 别名 group by user_uid order by level desc,time asc limit 30;

PHP代码中怎查询MYSQL数据库可以得到数据表中某个字段中最大的那条记录的ID号 举例说明:见问题补充

我是这样做的测试:

create table music(
id varchar(10),
title varchar(100),
name varchar(10)
);
insert into music values('2','离别','12354');
insert into music values('15','朋友','5454');
insert into music values('161','送别','4668');
<?php
$conn=mysql_connect("localhost:3307","数据库用户名","数据库密码");
mysql_select_db("date");
$result=mysql_query("select max(id+0) max_id from music",$conn);
$field=mysql_fetch_row($result);
print_r($field);
?>


结果:Array ( [0] => 161 )
因为mysql中varchar不能用max()所以通过id+0来转换id类型从而解决这个问题 ,如果你建表时id是整数型的就可以直接用max()了。详细解释见:hb.qq.com/a/20110624/000061.htm。

sql查询 分组后 每组某字段值最大的一行所有列

create table #a(address char(2),fenshu varchar(8))
insert into #a values ('a1','s1')
insert into #a values ('a1','s2')
insert into #a values ('a2','s3')
insert into #a values ('a1','s7')
insert into #a values ('a2','s4')
insert into #a values ('a2','s8')
insert into #a values ('a1','s8')
insert into #a values ('a2','s9')


实际语法测试 应该加上 分组条件区别,否则会有重复记录被取出(a.address = b.address)

select * from #a a
where fenshu in (
select max( fenshu) from #a b where a.address = b.address
group by address)


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论