1. 程式人生 > >GROUP BY ORDER BY 同時使用按時間排序

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

這樣就可以按時間排序了。