반응형
PostgreSQL에서 카테고리별로 최대 날짜 그룹으로 ID를 선택하는 방법은 무엇입니까?
예를 들어 카테고리별로 최대 날짜 그룹이있는 ID를 선택하고 싶습니다. 결과는 다음과 같습니다. 7, 2, 6
id category date
1 a 2013-01-01
2 b 2013-01-03
3 c 2013-01-02
4 a 2013-01-02
5 b 2013-01-02
6 c 2013-01-03
7 a 2013-01-03
8 b 2013-01-01
9 c 2013-01-01
PostgreSQL에서이 작업을 수행하는 방법을 알 수 있습니까?
이것은 DISTINCT ON
(Postgres 특정 표준 확장)에 대한 완벽한 사용 사례입니다 DISTINCT
.
SELECT DISTINCT ON (category)
id -- , category, date -- add any other column (expression) from the same row
FROM tbl
ORDER BY category, "date" DESC;
내림차순 정렬에주의하십시오. 열이 NULL 일 수있는 경우 다음을 추가 할 수 있습니다 NULLS LAST
.
DISTINCT ON
가장 간단하고 빠릅니다. 이 관련 답변에 대한 자세한 설명 :
큰 테이블의 경우 다음 대체 방법을 고려하십시오.
당 많은 행에 대한 성능 최적화 category
:
이걸로 해봐:
SELECT t1.* FROM Table1 t1
JOIN
(
SELECT category, MAX(date) AS MAXDATE
FROM Table1
GROUP BY category
) t2
ON T1.category = t2.category
AND t1.date = t2.MAXDATE
이 SQLFiddle 보기
또 다른 방법은 first_value
창 기능 을 사용하는 것입니다 : http://sqlfiddle.com/#!12/7a145/14
SELECT DISTINCT
first_value("id") OVER (PARTITION BY "category" ORDER BY "date" DESC)
FROM Table1
ORDER BY 1;
... 나는 hims056의 제안이 적절한 인덱스가있는 곳에서 일반적으로 더 잘 수행 될 것이라고 생각하지만.
세 번째 해결책은 다음과 같습니다.
SELECT
id
FROM (
SELECT
id,
row_number() OVER (PARTITION BY "category" ORDER BY "date" DESC) AS rownum
FROM Table1
) x
WHERE rownum = 1;
tbl GROUP BY cat HAVING MAX (date)에서 id 선택
반응형
'code' 카테고리의 다른 글
CSS를 사용하여 요소를 맨 앞으로 가져 오기 (0) | 2020.10.29 |
---|---|
노드 앱을 실행할 때 bcrypt 유효하지 않은 elf 헤더 (0) | 2020.10.29 |
좋은 경량 Python MVC 프레임 워크는 무엇입니까? (0) | 2020.10.29 |
jQuery 이벤트 .load (), .ready (), .unload () (0) | 2020.10.29 |
Class 객체 (java.lang.Class)는 무엇입니까? (0) | 2020.10.29 |