1. 程式人生 > >mysql查詢去重最大值篩選

mysql查詢去重最大值篩選

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;