GROUP BY ORDER BY 同時使用按時間排序
需要:合併相同使用者名稱,公司按逗號分隔。並且要按新增修改時間排序。
網上查了一下 GROUP BY ORDER BY 想要同時使用 ,ORDER BY 中的欄位一定要在GROUP BY 中出現的欄位,但這樣會導致不同時間新增的同一使用者名稱下沒辦法合成同一條資料。
後來自己研究了一下發現 可以用max函式 MAX(A.STATE_TIME) STATE_TIME ,這樣就不用放GROUP BY 中了。
SELECT A.USER_ID,
A.USER_NAME,
MAX(A.STATE_TIME) STATE_TIME,
COLUMNTOROW(',' || A.SAP_COST_CENTER_ID) SAP_COST_CENTER_ID,
COLUMNTOROW(',' || TO_CHAR(A.SAP_COST_CENTER_NAME)) SAP_COST_CENTER_NAME
FROM CFG_USER_PART_TIME A
LEFT JOIN (SELECT *
FROM (SELECT MAX(USER_ID) USER_ID, ORG_ID
FROM FFDEV.P_M_USERS_ORGS
GROUP BY ORG_ID) B
LEFT JOIN P_M_ORG_LOCATION C
ON B.ORG_ID = C.ORG_ID) D
ON A.USER_ID = D.USER_ID
WHERE A.STATE = '10A'
GROUP BY A.USER_ID, A.USER_NAME
ORDER BY STATE_TIME DESC
這樣就可以按時間排序了。