집 >데이터 베이스 >MySQL 튜토리얼 >Oracle SQL에서 각 ID의 최신 수량을 검색하는 방법은 무엇입니까?
Oracle SQL: ID별 최신 수량 추출
이 가이드에서는 Oracle SQL 데이터베이스 내의 각 고유 ID에 대한 최신 수량을 효율적으로 검색하는 방법을 보여줍니다. 다음 구조의 "qtys"라는 테이블이 있다고 가정해 보겠습니다.
ID
: 각 레코드의 고유 식별자TS
: 수량이 기록된 시점을 나타내는 타임스탬프QTY
: 수량 값입니다.목표는 모든 개별 QTY
에 대한 최신 수량(TS
)과 해당 타임스탬프(ID
)를 얻는 것입니다.
해결책:
다음 쿼리는 이를 달성하기 위해 MAX()
함수와 GROUP BY
절을 활용합니다.
<code class="language-sql">SELECT id, MAX(TS) AS "Latest Timestamp", MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity" FROM qtys GROUP BY id;</code>
이 쿼리는 데이터를 ID
별로 그룹화한 다음 각 그룹에 대해 최대 타임스탬프(MAX(TS)
)를 선택합니다. 결정적으로 MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS)
는 여러 항목이 동일한 최대 타임스탬프를 공유하더라도 최신 타임스탬프와 관련된 수량을 검색하도록 보장합니다.
대체 접근 방식:
1. 지난 X분 동안 필터링:
결과를 지난 X분 내의 항목으로 제한하려면 WHERE
절을 포함하세요.
<code class="language-sql">SELECT id, MAX(TS) AS "Latest Timestamp", MAX(QTY) KEEP (DENSE_RANK LAST ORDER BY TS) AS "Latest Quantity" FROM qtys WHERE TS > SYSTIMESTAMP - INTERVAL '30' MINUTE GROUP BY id;</code>
'30' MINUTE
을 원하는 시간 간격으로 바꾸세요.
2. 다른 테이블로 참여하기:
다른 테이블의 데이터를 통합해야 하는 경우(예: idname
열이 있는 "이름"), JOIN
:
<code class="language-sql">SELECT t1.id || '-' || t2.idname AS "ID-IDNAME", MAX(t1.TS) AS "Latest Timestamp", MAX(t1.QTY) KEEP (DENSE_RANK LAST ORDER BY t1.TS) AS "Latest Quantity" FROM qtys t1 JOIN names t2 ON t1.id = t2.id GROUP BY t1.id || '-' || t2.idname;</code>
이것은 id
열을 기준으로 "qtys"와 "names"를 결합하고 결합된 식별자에 대해 ID
과 idname
을 연결합니다. 그런 다음 MAX()
함수는 결합된 데이터에 대해 작동합니다. 특정 데이터베이스 스키마와 일치하도록 테이블 및 열 이름을 조정하는 것을 잊지 마세요.
위 내용은 Oracle SQL에서 각 ID의 최신 수량을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!