mysql查询去重最大值筛选

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010590568/article/details/84757557

goodsinoutlog表是玩家充值记录表。RoleID为用户ID,NewValue为最新的充值总金额。玩家的所有记录都会被收录。但是我们只需要最大的NewValue的那一项。所以需要去除重复。而且还要取最大的NewValue的那一条。 

表结构:

mysql> desc goodsinoutlog;
+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| Time         | int(4)              | NO   | MUL | 0       |       |
| Type         | tinyint(1)          | NO   |     | 0       |       |
| RoleID       | bigint(20) unsigned | NO   |     | 0       |       |
| ThirdChannel | varchar(50)         | NO   |     | 0       |       |
| PlayerName   | varchar(50)         | NO   |     | NULL    |       |
| PlayerLevel  | smallint(2)         | NO   |     | 0       |       |
| VIPLevel     | smallint(2)         | NO   |     | 0       |       |
| ResType      | smallint(2)         | NO   |     | 0       |       |
| ItemID       | int(4)              | NO   |     | 0       |       |
| OldValue     | bigint(20)          | NO   |     | 0       |       |
| ChangeValue  | bigint(20)          | NO   |     | 0       |       |
| NewValue     | bigint(20)          | NO   |     | 0       |       |
| ActionType   | smallint(2)         | NO   |     | 0       |       |
| Param        | int(4)              | NO   |     | 0       |       |
+--------------+---------------------+------+-----+---------+-------+
14 rows in set (0.09 sec)

查询脚本

SELECT * from (SELECT * FROM projectdzz.goodsinoutlog WHERE ActionType=108 ORDER BY RoleID,NewValue) a GROUP BY a.RoleID;

mysql> SELECT * from (SELECT * FROM projectdzz.goodsinoutlog WHERE ActionType=108 ORDER BY RoleID,NewValue DESC) a GROUP BY a.RoleID;
+------------+------+--------------------+---------------+--------------------+-------------+----------+---------+--------+----------+-------------+----------+------------+-------+
| Time       | Type | RoleID             | ThirdChannel  | PlayerName         | PlayerLevel | VIPLevel | ResType | ItemID | OldValue | ChangeValue | NewValue | ActionType | Param |
+------------+------+--------------------+---------------+--------------------+-------------+----------+---------+--------+----------+-------------+----------+------------+-------+
| 1542506760 |    1 | 865428900757372930 | android_bt_gm | 清明上河图         |          13 |       18 |       2 |      0 |    39955 |        3000 |    42955 |        108 |   101 |
| 1542506465 |    1 | 865428900757372932 | android_bt_gm | 忽悠上帝信佛       |          13 |       18 |       2 |      0 |    40105 |      500000 |   540105 |        108 |   601 |
| 1542507061 |    1 | 865428900757372934 | android_bt_gm | 莲花王             |          13 |       18 |       2 |      0 |     7545 |        3000 |    10545 |        108 |   101 |
| 1542506674 |    1 | 865428900757372938 | android_bt_gm | 贫僧不入尘         |          13 |       18 |       2 |      0 |    40305 |       50000 |    90305 |        108 |   301 |
| 1542506761 |    1 | 865428900757372941 | android_bt_gm | 丿迷失灬岛         |          42 |       18 |       2 |      0 |    40104 |        3000 |    43104 |        108 |   101 | 
+------------+------+--------------------+---------------+--------------------+-------------+----------+---------+--------+----------+-------------+----------+------------+-------+
40 rows in set (14.74 sec)

首先我们队标goodsinoutlog做个按照RoleID,NEwValue的排序。最大的会排在最前面,使用的是DESC,取消则使用ASC,默认的就是。后面GROUP BY的时候取第一条 就是想要的数据了!

使用服务器一次查询多个服务器,也可以写一个shell脚本,并且重定向都本地文件1.txt

mysql -h62.234.102.115 -uroot -prooot -N -e"SELECT * from (SELECT * FROM projectdzz.goodsinoutlog WHERE ActionType=108 ORDER BY RoleID,NewValue DESC) a GROUP BY a.RoleID" >1.txt;

猜你喜欢

转载自blog.csdn.net/u010590568/article/details/84757557