database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 26667 게시물 읽기
No. 26667
데이타 합해서 정리하는거 질문 좀...
작성자
이진웅(lynnweb)
작성일
2006-05-07 20:28ⓒ
2006-05-07 20:29ⓜ
조회수
1,931

 

아래와 같은 데이터가 있습니다. tdate 는 date 형 칼럼이고요.
선물시장 데이터인데요...
일자마다 시간순으로 약 360건 정도의 데이타가 있구요.
이 데이타를 기반으로 일자별 데이타를 한건씩으로 정리해야 됩니다.
1분 데이타를 일자별로 정리해서 1데이 데이타로 만들어야 합니다.


"tdate","OPEN","HIGH","LOW","CLOSE","VOLUME"
1996-05-03 09:00:00,108.50,108.50,108.50,108.50,24
1996-05-03 09:01:00,108.75,108.75,108.55,108.55,3
1996-05-03 09:02:00,108.55,108.55,108.55,108.55,1
.
.
1996-05-03 15:05:00,108.55,108.55,108.55,108.55,1
1996-05-03 15:15:00,108.40,108.40,108.35,108.40,1
.
.
1996-05-04 09:00:00,108.50,108.50,108.50,108.50,24
1996-05-04 09:01:00,108.75,108.75,108.55,108.55,3
1996-05-04 09:02:00,108.55,108.55,108.55,108.55,1
.
.
1996-05-04 15:05:00,108.55,108.55,108.55,108.55,1
1996-05-04 15:15:00,108.40,108.40,108.40,108.40,1
.
.

tdate는 날짜와 시간이고요.
OPEN은 해당 1분의 시작 지수
HIGH는 해당 1분동안 최고 지수
LOW는 해당 1분동안 최저 지수
CLOSE는 해당 1분이 끝날때의 지수 입니다.

 

즉 맨 위 1996년 5월3일과 같은 경우는
하루 데이타가 약 375건인데

"tdate","OPEN","HIGH","LOW","CLOSE","VOLUME"
1996-05-03 09:00:00,108.75,108.50,108.35,108.40,12353

 

새로운 테이블에 하루치 데이타가 이런 식으로 한건으로 정리가 되어야 합니다.

 

여기서 open 은 해당일자중 가장 첫 1분 데이타 행의 OPEN 값이고,
HIGH 는 해당일자의 HIGH 자료중 최고값
LOW 는 해당일자의 LOW 자료중 최저값
CLOSE 는 해당일자의 맨 마지막 1분 데이타 행의 CLOSE 값
VOLUME 은 당일 VOLUME 의 합산 값입니다.

 

일자별 테이블을 따로 만들어서 작업할건데요.
HIGH, LOW, VOLUME 은 각각 max(), min(), sum() 이용하면
될거 같은데...
나머지 해당 일자의 첫번째와 마지막 데이타의 특정 칼럼을
가져오는건 어케해야 될지 모르겠네요.

 

PL/SQL 로 작업해야 될까요?
아니면 그냥 query 로 가능할까요?

도움 부탁 드립니다.

 

 

 

이 글에 대한 댓글이 총 4건 있습니다.

 

SELECT TO_DATE(TO_CHAR(TDATE, 'YYYYMMDD'), 'YYYYMMDD') TDATE
      ,TO_NUMBER(SUBSTR(MIN(TO_CHAR(TDATE, 'YYYYMMDDHH24MISS')||TO_CHAR(OPEN, 'FM0000.00')), 15))  OPEN
      ,MAX(HIGH)                  HIGH
      ,MIN(LOW)                   LOW
      ,TO_NUMBER(SUBSTR(MAX(TO_CHAR(TDATE, 'YYYYMMDDHH24MISS')||TO_CHAR(CLOSE, 'FM0000.00')), 15)) CLOSE
      ,SUM(VOLUME)                VOLUME
FROM (
     SELECT TO_DATE('19960503090000', 'YYYYMMDDHH24MISS') TDATE, 108.50 OPEN, 108.50 HIGH,108.50 LOW, 108.50 CLOSE, 24 VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960503090100', 'YYYYMMDDHH24MISS') TDATE, 108.75 OPEN, 108.75 HIGH,108.55 LOW, 108.55 CLOSE, 3  VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960503090200', 'YYYYMMDDHH24MISS') TDATE, 108.55 OPEN, 108.55 HIGH,108.55 LOW, 108.55 CLOSE, 1  VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960503150500', 'YYYYMMDDHH24MISS') TDATE, 108.55 OPEN, 108.55 HIGH,108.55 LOW, 108.55 CLOSE, 1  VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960503151500', 'YYYYMMDDHH24MISS') TDATE, 108.40 OPEN, 108.40 HIGH,108.35 LOW, 108.40 CLOSE, 1  VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960504090000', 'YYYYMMDDHH24MISS') TDATE, 108.50 OPEN, 108.50 HIGH,108.50 LOW, 108.50 CLOSE, 24 VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960504090100', 'YYYYMMDDHH24MISS') TDATE, 108.75 OPEN, 108.75 HIGH,108.55 LOW, 108.55 CLOSE, 3  VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960504090200', 'YYYYMMDDHH24MISS') TDATE, 108.55 OPEN, 108.55 HIGH,108.55 LOW, 108.55 CLOSE, 1  VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960504150500', 'YYYYMMDDHH24MISS') TDATE, 108.55 OPEN, 108.55 HIGH,108.55 LOW, 108.55 CLOSE, 1  VOLUME FROM DUAL UNION ALL
     SELECT TO_DATE('19960504151500', 'YYYYMMDDHH24MISS') TDATE, 108.40 OPEN, 108.40 HIGH,108.40 LOW, 108.40 CLOSE, 1  VOLUME FROM DUAL
     ) A
GROUP BY TO_DATE(TO_CHAR(TDATE, 'YYYYMMDD'), 'YYYYMMDD')
M님이 2006-05-07 22:30에 작성한 댓글입니다. Edit

 

 

M님 답변 감사합니다. 그런데...

sub query 이용해서 일일히 다 열거해 주어야 하는건가요?

저 위에 올린 데이타가 약 80만건 이라서요 -_-;;;

 

query 로 가능한 작업인지, 아니면 PL/SQL 을 이용해야 하는건지

알고 싶어서 그렇습니다.

 

 

이진웅(lynnweb)님이 2006-05-07 23:56에 작성한 댓글입니다.

제가 테이블이 없기에 데이터를 님께서 주신 예를 가지고

인라인뷰를 통해서 만든 것 뿐입니다.

 

from 절에는 원래 테이블을 쓰시면 되겠죠.. ^^

 

전체 데이터가 80만건이라면 그다지 무리는 없을 것 같은데..

무리가 된다면 where절에 날짜 조건을 거셔서 몇번에 걸쳐 처리하면

될 것 같습니다.

m님이 2006-05-08 01:21에 작성한 댓글입니다.
이 댓글은 2006-05-08 01:23에 마지막으로 수정되었습니다. Edit

헉, 한큐에 잘 되네요!

M님 감사 드립니다. 몇일 동안 고민하던거가 해결되었습니다.

쿼리 한방의 허무함을 느끼는군요.

꾸벅 (--)(__)(--)

 

이진웅님이 2006-05-08 02:16에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
26670imp 할 때 error가 발생합니다. [1]
이수정
2006-05-08
2990
26669select 하면 테이블이 없다고 나옴... [1]
^^
2006-05-08
1308
26668v$sqltext 에 대해서... [5]
까먹지마
2006-05-07
7646
26667데이타 합해서 정리하는거 질문 좀... [4]
이진웅
2006-05-07
1931
26666트리거에서 where문에 만족하는 값이 없는경우... [6]
김종욱
2006-05-07
3997
26665date 형식 비교하는 방법? [2]
이진웅
2006-05-07
3542
266631 [3]
눈을떳다
2006-05-06
3397
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.052초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다