반응형
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에서 어떻게 하는지 알 수 있을까요?
이는 표준의 Postgres 특정 확장에 대한 완벽한 사용 사례입니다.DISTINCT:
SELECT DISTINCT ON (category)
id -- , category, date -- 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
이 SQLFidle 보기
또 다른 접근 방식은 다음과 같습니다.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;
언급URL : https://stackoverflow.com/questions/16914098/how-to-select-id-with-max-date-group-by-category-in-postgresql
반응형
'programing' 카테고리의 다른 글
| 프로세스인지 확인하는 방법.시작()이(가) 성공적입니까? (0) | 2023.05.09 |
|---|---|
| 파이썬 3에서 x**4.0이 x**4보다 빠른 이유는 무엇입니까? (0) | 2023.05.09 |
| MongoDB 나침반: 고유 필드 값 선택 (0) | 2023.05.09 |
| web.config에서 SMTP 설정을 구성하는 방법 (0) | 2023.05.09 |
| sudo로 두 개의 명령을 실행하는 방법은 무엇입니까? (0) | 2023.05.09 |