2016-01-28 1 views
0

У меня есть этот пример таблица:Postgres выберите запрос для 3 столбца с максимальной

id branch branch_running_no 
1  1   5 
2  1   10 
3  2   5 
4  2   10 
5  3   5 
6  3   10 
7  4   5 
8  4   10 
9  5   5 
10  5   10 

Используя этот запрос, я могу получить максимальную branch_running_no для каждого столбца ветви, но я также хочу, чтобы включить столбец идентификатор макс branch_running_no.

SELECT branch, MAX(branch_running_no) from table1 GROUP BY branch order by branch; 

Я был в состоянии достигнуть:

branch max 
1   10 
2   10 
3   10 
4   10 
5   10 

но мне нужно:

id branch max 
2  1   10 
4  2   10 
6  3   10 
8  4   10 
10 5   10 

ответ

1
SELECT id 
    ,branch 
    ,branch_running_no 
FROM (
    SELECT id 
      ,branch 
      ,branch_running_no 
      ,row_number() OVER (PARTITION BY branch ORDER BY branch_running_no DESC) rn 
    FROM t 
    ) t 
WHERE rn = 1 

или

SELECT distinct on(branch) id,branch, MAX(branch_running_no) from t GROUP BY id,branch order by branch,3 desc; 
+1

это работает. Спасибо. –

0

SELECT, идентификатор, ветви, MAX (branch_running_no) от table1 GROUP BY ID, филиал упорядочить по идентификатор, филиал;

+0

Нет, это будет группа колонкой ид тоже, который является уникальным, поэтому он будет возвращать всю таблицу. –