[SQL] 오라클 SQL 쿼리 : 시간을 기준으로 그룹 별 최신 값을 검색 [중복]
SQL오라클 SQL 쿼리 : 시간을 기준으로 그룹 별 최신 값을 검색 [중복]
나는 오라클 DB에 다음과 같은 테이블이
id date quantity
1 2010-01-04 11:00 152
2 2010-01-04 11:00 210
1 2010-01-04 10:45 132
2 2010-01-04 10:45 318
4 2010-01-04 10:45 122
1 2010-01-04 10:30 1
3 2010-01-04 10:30 214
2 2010-01-04 10:30 5515
4 2010-01-04 10:30 210
지금은 ID 당 최신 값 (및 시간)를 검색하고 싶습니다. 출력 예 :
id date quantity
1 2010-01-04 11:00 152
2 2010-01-04 11:00 210
3 2010-01-04 10:30 214
4 2010-01-04 10:45 122
난 그냥 쿼리에 그것을 넣어하는 방법을 알아낼 수 없습니다 ...
또한 다음과 같은 옵션이 좋은 것입니다 :
옵션 1 : 쿼리가 마지막 XX 분에서있는 값을 반환해야합니다.
옵션 2 : ID가 ID와 idName에는이있는 다른 테이블에서 텍스트와 연결되어야한다. ID-idName에는 (예 1 testid1) ID의 출력은 다음과 같이 될 것이다.
어떤 도움을위한 많은 감사합니다!
해결법
-
==============================
1.이 데이터를 감안할 때 ...
이 데이터를 감안할 때 ...
SQL> select * from qtys 2 / ID TS QTY ---------- ---------------- ---------- 1 2010-01-04 11:00 152 2 2010-01-04 11:00 210 1 2010-01-04 10:45 132 2 2010-01-04 10:45 318 4 2010-01-04 10:45 122 1 2010-01-04 10:30 1 3 2010-01-04 10:30 214 2 2010-01-04 10:30 5515 4 2010-01-04 10:30 210 9 rows selected. SQL>
... 다음 쿼리는 당신이 원하는 것을 제공합니다 ...
SQL> select x.id 2 , x.ts as "DATE" 3 , x.qty as "QUANTITY" 4 from ( 5 select id 6 , ts 7 , rank () over (partition by id order by ts desc) as rnk 8 , qty 9 from qtys ) x 10 where x.rnk = 1 11 / ID DATE QUANTITY ---------- ---------------- ---------- 1 2010-01-04 11:00 152 2 2010-01-04 11:00 210 3 2010-01-04 10:30 214 4 2010-01-04 10:45 122 SQL>
귀하의 추가 요구 사항에 관해서, 당신은 외부 WHERE 절에 추가 필터를 적용 할 수 있습니다. 그것은 다른 테이블처럼 마찬가지로 당신은 인라인 뷰에 테이블을 추가로 가입 할 수 있습니다.
-
==============================
2.여기에 완전한 테스트 예입니다.
여기에 완전한 테스트 예입니다.
CREATE TABLE tbl1 (ID NUMBER, dt DATE, quantity NUMBER); DELETE FROM tbl1; insert into tbl1 values (1,to_date('2010-01-04 11:00','YYYY-MM-DD HH24:MI'), 152); insert into tbl1 values (2,to_date('2010-01-04 11:00','YYYY-MM-DD HH24:MI'), 210); insert into tbl1 values (1,to_date('2010-01-04 10:45','YYYY-MM-DD HH24:MI'), 132); insert into tbl1 values (2,to_date('2010-01-04 10:45','YYYY-MM-DD HH24:MI'), 318); insert into tbl1 values (4,to_date('2010-01-04 10:45','YYYY-MM-DD HH24:MI'), 122); insert into tbl1 values (1,to_date('2010-01-04 10:30','YYYY-MM-DD HH24:MI'), 1); insert into tbl1 values (3,to_date('2010-01-04 10:30','YYYY-MM-DD HH24:MI'), 214); insert into tbl1 values (2,to_date('2010-01-04 10:30','YYYY-MM-DD HH24:MI'), 5515); insert into tbl1 values (4,to_date('2010-01-04 10:30','YYYY-MM-DD HH24:MI'), 210); SELECT t.ID , t.DT , t.QUANTITY FROM tbl1 t ,( SELECT ID , MAX(dt) dt FROM tbl1 GROUP BY ID ) t2 WHERE t.id = t2.id AND t.dt = t2.dt
결과 :
1 1/4/2010 11:00:00 AM 152 2 1/4/2010 11:00:00 AM 210 3 1/4/2010 10:30:00 AM 214 4 1/4/2010 10:45:00 AM 122
마지막 XX 분의 기록을 얻고 싶은 경우에, 당신은 (나는이 예제에서, 당신이 원하는 무엇이든 함께 500을 대체 500 분을 사용하고 있습니다)이 작업을 수행 할 수 있습니다
SELECT t.ID , t.DT , t.QUANTITY FROM tbl1 t ,( SELECT ID , MAX(dt) dt FROM tbl1 WHERE dt >= SYSDATE - (500 / 1400) GROUP BY ID ) t2 WHERE t.id = t2.id AND t.dt = t2.dt;
from https://stackoverflow.com/questions/2000908/oracle-sql-query-retrieve-latest-values-per-group-based-on-time by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 행에서 쉼표로 구분 된 문자열을 얻을 [중복] (0) | 2020.03.17 |
---|---|
[SQL] VARCHAR2와 문자 사이의 주요 차이점은 무엇입니까 (0) | 2020.03.17 |
[SQL] 엔티티 프레임 워크 수동으로 키를 입력 (0) | 2020.03.16 |
[SQL] 한 행에 여러 행을 집계 오라클 SQL 쿼리가 있습니까? [복제] (0) | 2020.03.16 |
[SQL] SQL 구문의 경우 민감한인가? (0) | 2020.03.16 |