Oracle SQL: ID별 최신 수량 추출
이 가이드는 Oracle SQL의 타임스탬프 데이터가 포함된 테이블에서 각 고유 ID의 최신 수량을 효율적으로 검색하는 방법을 보여줍니다.
핵심 접근 방식에는 중첩 쿼리 전략이 포함됩니다.
<code class="language-sql">SELECT id, MAX(ts) AS "DATE", MAX(quantity) AS "QUANTITY" FROM ( SELECT id, ts, RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk, quantity FROM your_table_name ) ranked_data WHERE rnk = 1 GROUP BY id;</code>
이 쿼리는 다음과 같이 작동합니다.
내부 쿼리(순위_데이터): 이 하위 쿼리는 RANK()
창 함수를 사용하여 각 id
그룹 내의 각 행에 순위를 할당하며 타임스탬프(ts
)를 기준으로 내림차순으로 정렬됩니다. . 각 id
의 최신 기록은 1위를 받습니다.
외부 쿼리: 이 쿼리는 내부 쿼리의 결과를 필터링하여 rnk = 1
(최신 기록)이 있는 행만 선택합니다. 그런 다음 결과를 id
별로 그룹화하고 MAX()
을 사용하여 해당 타임스탬프와 수량을 검색합니다. 최신 타임스탬프가 최신 수량도 암시한다고 가정하면 MAX(quantity)
와 함께 GROUP BY id
을 사용하는 것이 적절합니다. 최신 타임스탬프는 동일하지만 수량이 다른 여러 행이 있을 수 있는 경우 다른 집계 방법이 필요할 수 있습니다(예: 더 복잡한 쿼리의 FIRST_VALUE
).
개선 사항:
1. 시간 기반 필터링: 결과를 특정 기간(예: 지난 XX분)으로 제한하려면 내부 쿼리에 WHERE
절을 추가하세요.
<code class="language-sql">WHERE ts >= SYSTIMESTAMP - INTERVAL 'XX' MINUTE</code>
2. 다른 테이블과 조인: 다른 테이블의 데이터를 통합하려면(예: 추가 ID 정보가 있는 id_table
) 외부 쿼리에 JOIN
을 사용하세요.
<code class="language-sql">SELECT id || '-' || idname AS "ID-IDNAME", MAX(ts) AS "DATE", MAX(quantity) AS "QUANTITY" FROM ( SELECT id, ts, RANK() OVER (PARTITION BY id ORDER BY ts DESC) AS rnk, quantity FROM your_table_name ) ranked_data INNER JOIN id_table ON ranked_data.id = id_table.id WHERE rnk = 1 GROUP BY id || '-' || idname;</code>
your_table_name
및 id_table
를 실제 테이블 이름으로 바꿔야 합니다. 이러한 세련된 접근 방식은 Oracle SQL에서 가장 최근의 수량 데이터를 검색하기 위한 강력하고 유연한 솔루션을 제공합니다.
위 내용은 Oracle SQL에서 ID 및 타임스탬프당 최신 수량을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!