mysql查詢去重最大值篩選
阿新 • • 發佈:2018-12-03
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;