(1) 找到用戶最后一一條記錄
主要用了group_concat() 函數(shù),把分組結(jié)果以","連接,指定排序規(guī)則 ,再用substring_index取走自己想要的位置

(2)把一列中的多值拆分為多行,其余列不變
工作中我們會(huì)遇到這樣的問題,剛開始記錄的時(shí)候表格是下面這個(gè)樣子如表A,后續(xù)有數(shù)據(jù)庫了希望按照關(guān)系型數(shù)據(jù)庫的要求拆分成表B,不同人的信息記錄條數(shù)不一致,好的一點(diǎn)是記錄的分割服都是;
思考:這個(gè)思路很有意思,先把一行變成多行,然后對多行的數(shù)據(jù)進(jìn)行替換!第一個(gè)問題用的主要是函數(shù),第二個(gè)問題主要是思想






其中a、b列為輔助列,便于理解思考,實(shí)際取user,phone兩列即可!
-------------------------------------------------
SELECT roleid ,
SUBSTRING_INDEX(
GROUP_CONCAT(logintime? ORDER BY logintime DESC)? # GROUP_CONCAT? 對查查詢結(jié)果進(jìn)匯總以“,”相連
,",",1) AS? logintime? ? ? ? ? #取出字符串第一個(gè)位置的字符
FROM? rolelogin as a
WHERe? a.logintime >'2017-09-07 00:00:00' and? a.logintime <'2017-09-08 00:00:00'
GROUP BY roleid
--------------------------------
SELECT user ,SUBSTRING_INDEX(mobile,";",a.id) as a ,concat(SUBSTRING_INDEX(mobile,";",a.id-1 ),';') as b ,
REPLACE(SUBSTRING_INDEX(mobile,";",a.id),concat(SUBSTRING_INDEX(mobile,";",a.id-1 ),';'),"")? as? phone? #根據(jù)SUBSTRING_INDEX函數(shù)的特性,替換(a.id-1)部分為 為空值,取出a.id
FROM
id? as? a
CROSS JOIN
(SELECT? user,CONCAT(phone,";") as? mobile ,LENGTH(phone)-LENGTH(replace(phone,';','')) +1 as size ?#確定要拆分成幾行
FROM phonenuber ) as? b
on a.id <= b.size