2017-09-27 1 views
1

집계에 대해 예약 된 최대 값을 갖는 행의 기본 키 id을 검색해야하는 간단한 그룹 별 구문이 있습니다.Postgres GROUP BY는 기본 키가 포함될 때 모든 행을 반환합니다.

select id, max(scheduled) from event group by customer_id, id; 

이렇게하면 예약 된 값을 가진 모든 결과가 각 고객의 최대 (예약 됨)로 반환됩니다.

ID를 포함하지 않으면 집계가 예상대로 작동합니다.

select max(scheduled) from event group by customer_id; 

답변

1

PK는 설계 상 고유합니다. PK 값만큼 많은 그룹을 얻습니다. 당신은 사용할 수 있습니다

SELECT id, customer_id, scheduled AS max_scheduled 
FROM event 
WHERE (customer_id, scheduled) = (select customer_id, max(scheduled) 
            from event 
            group by customer_id); 
+1

감사합니다, 아침의 정신 안개는 매우 해제되지 않은 – metame

0

또 다른 방법은 당신이 DISTINCT ON을 사용하고 원하는 것을 달성하기 위해 :

SELECT DISTINCT ON (customer_id) id, scheduled 
FROM event 
ORDER BY customer_id, scheduled DESC; 
관련 문제