[SQL] 어떻게 PostgreSQL을 범주별로 최대 날짜 그룹 ID를 선택하려면?
SQL어떻게 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의에서이 작업을 수행하는 방법을 알 수 있습니까?
해결법
-
==============================
1.이 DISTINCT ON (표준 DISTINCT의 포스트 그레스의 특정 확장자)을위한 완벽한 사용 사례입니다 :
이 DISTINCT ON (표준 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는 간단하고 빠릅니다. 이 관련 답변에 대한 자세한 설명 :
큰 테이블의 경우이 다른 방법을 고려하십시오
카테고리 당 많은 행에 대한 성능 최적화 :
-
==============================
2.이걸로 해봐:
이걸로 해봐:
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
-
==============================
3.http://sqlfiddle.com/#!12/7a145/14 : 또 다른 방법은 FIRST_VALUE 윈도우 함수를 사용하는 것입니다
http://sqlfiddle.com/#!12/7a145/14 : 또 다른 방법은 FIRST_VALUE 윈도우 함수를 사용하는 것입니다
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;
-
==============================
4.MAX (날짜) HAVING 고양이 BY TBL 그룹에서 SELECT ID
MAX (날짜) HAVING 고양이 BY TBL 그룹에서 SELECT ID
from https://stackoverflow.com/questions/16914098/how-to-select-id-with-max-date-group-by-category-in-postgresql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 워크 벤치 : 살아 연결을 유지하는 방법 (0) | 2020.04.23 |
---|---|
[SQL] 주문과 SQL 그룹으로 (0) | 2020.04.23 |
[SQL] C #을 사용 SQL 형식으로 날짜 시간 형식 (0) | 2020.04.23 |
[SQL] 어떻게 사용합니까 ROW_NUMBER ()? (0) | 2020.04.23 |
[SQL] 이유는 카운트 (*) "열"의 별칭을 사용하고 HAVING 절에서 참조 할 수 없습니다? (0) | 2020.04.23 |