程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql 數據分組取某字段值所有最大的記錄行,mysql字段

Mysql 數據分組取某字段值所有最大的記錄行,mysql字段

編輯:MySQL綜合教程

Mysql 數據分組取某字段值所有最大的記錄行,mysql字段


需求:

表中同一個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)
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved