다음과 같이 테이블이 있습니다 (실제로 큰 쿼리이므로 테이블에 대해 조인을 사용하지 마십시오).
date | priority | data
20200301 | 1 | 0.3
20200301 | 2 | 0.4
20200302 | 2 | 0.4
20200302 | 3 | 0.1
20200303 | 1 | 0.8
따라서 각 날짜의 우선 순위가 가장 낮은 날짜와 데이터를 원하므로 찾고있는 쿼리의 결과는 다음과 같습니다.
date | priority | data
20200301 | 1 | 0.3
20200302 | 2 | 0.4
20200303 | 1 | 0.8
group by 절을 만들려고 할 때마다 해당 쿼리는 데이터 열을 검색하거나 데이터 열에서 다른 값을 지원할 수 없습니다.
이를 위해 row_number
창 기능을 사용할 수 있습니다 .
CREATE TABLE t (
"date" INTEGER,
"priority" INTEGER,
"data" FLOAT
);
INSERT INTO t
("date", "priority", "data")
VALUES ('20200301', '1', '0.3')
, ('20200301', '2', '0.4')
, ('20200302', '2', '0.4')
, ('20200302', '3', '0.1')
, ('20200303', '1', '0.8');
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY date ORDER BY priority)
FROM t
) f
WHERE row_number = 1
보고:
+--------+--------+----+----------+
|date |priority|data|row_number|
+--------+--------+----+----------+
|20200301|1 |0.3 |1 |
|20200302|2 |0.4 |1 |
|20200303|1 |0.8 |1 |
+--------+--------+----+----------+
주석에서 @david가 언급했듯이 "priority = min_priority_for_date"를 기준으로 행을 필터링하는 것이 더 효율적일 수 있습니다 (순위를 매기고 나중에 필터링하는 대신).
SELECT *
FROM t
WHERE (date, priority) IN (
SELECT date, MIN(priority)
FROM t
GROUP BY date
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다