2017-05-27 46 views
-1

我有這樣的一個表:PostgreSQL的 - 組由何

role_menu_id | role_id  | menu_id | menu_permission_id 
38     1   2   1    
39     1   2   2 
40     1   2   3 
41     2   4   NULL 
42     1   2   4 

我通過(ROLE_ID)要組這樣的最終結果:

role_menu_id | role_id  | menu_id | menu_permission_id 
42     1   2   4 
41     2   4   NULL 

如果menu_permission_id ROLE_ID的是null,然後打印NULL(請參閱:行號41)。

但是,如果ROLE_ID的menu_permission_id不爲空,則獲得最大的(menu_permission_id)

如何?在此先感謝

我還沒有SQL查詢,因爲困惑。

+1

SELECT MAX(role_menu_id),ROLE_ID,最大值(menu_id),最大值(menu_permission_id)FROM TABLE_NAME GROUP BY ROLE_ID – Riya

回答

0

這會給你。

注意:如果兩行有max(menu_permission_id),那麼該查詢將返回一行max(role_menu_id)

SQL FIddle Demo

select * From 
(select t.*, 
row_Number() over (partition by role_id,menu_id 
        order by role_Menu_id desc) as max_menu 
from table1 t) t1 
where max_menu=1;