메뉴 건너뛰기

Dev tips

http://blog.naver.com/hjc426/130037056133http://blog.naver.com/hhihealth/150017470627일별로 금액이 들어가 있는 테이블이 있습니다.

날짜              금액
2006/12/25     100,000
2006/12/26     200,000
2006/12/27     150,000
2006/12/28     250,000
2006/12/29     150,000
2006/12/30     170,000
2006/12/31     190,000
2007/01/01     150,000
2007/01/02     150,000
2007/01/03     140,000
2007/01/04     250,000
2007/01/05     350,000
.....

이 테이블의 1월 금액을 구하려고 합니다.(달력 형태로 표시할려고 합니다.)
단. 구하는 금액은 지정일의 + 3일의 금액을 구해야 합니다.

즉 1월1일칸에 표시 되는 금액은 (1일 + 2일 + 3일) 의 합계가 표시 되어야 합니다.
이렇게 31일까지 출력시키고 싶습니다.

해결 할 수 있는 힌트를 부탁드릴수 있을까요..


SELECT 날짜, 금액,
       SUM(금액) OVER(ORDER BY 날짜
                      RANGE BETWEEN INTERVAL '0' DAY PRECEDING
                                                   AND INTERVAL '2' DAY FOLLOWING) sum_3days
       FROM 테이블



---------------------------------------------------------------------------------
추가문제


테이블이 아래와 같습니다.

table : card_work

date       card_no   work_no   time     amt
============================================
20081010   084124    6321     234352   4000
20081011   123456    3422     101033   2000
20081011   483839    5322     101036   5000
20081011   123456    4333     101038   2000
20081012   483839    5322     024324   5000
20081012   483839    4256     024326   5000
20081012   483839    4256     024327   5000
20081012   334124    3211     021145   3890
20081012   334124    3743     054253   6000


(time 은 varchar2 시분초 로 되어있습니다)

위와 같은 테이블이 있을 때
같은 날짜(date)에 5초 이내(time) 에 처리된(두번이상 row가 생성된)
동일한 카드번호를 가지고 있는 데이터를 뽑아야합니다.


위와 같은 데이터 일때
date       card_no   work_no   time     amt
============================================
20081011   123456    3422     101033   2000
20081011   123456    4333     101038   2000
20081012   483839    5322     024324   5000
20081012   483839    4256     024326   5000
20081012   483839    4256     024327   5000

이런 로우만 출력.(같은 날짜, 같은 카드번호, 시간차이가 5초 이내)


SELECT *
FROM
(
SELECT t.*, COUNT(*) OVER(PARTITION BY card_no -- 같은 카드번호
        ORDER BY TO_DATE(dt||time,'yyyymmddhh24miss') -- 시간 기준
                RANGE        BETWEEN NUMTODSINTERVAL('5','second') PRECEDING                -- 5초전
                        AND NUMTODSINTERVAL('5','second') FOLLOWING                -- 5초후
        ) AS cnt
FROM t
)
WHERE cnt > 1 -- 갯수가 1이상이면 같은 카드번호에서 5초전~5초후 내용이 1개 이상 존재

번호 제목 글쓴이 날짜 조회 수
474 유용한 함수 pack, unpack, ip2long, long2ip taknim 2009.01.13 33390
473 해커들을 위한 CMD 툴 모음 file taknim 2008.05.22 32582
472 [js & php] 비밀번호 유효성 체크 - 연속 문자, 같은 문자 taknim 2011.11.09 28789
471 [Oracle] ORA-00600, ORA-06544, ORA-06553 오류 발생시 taknim 2009.06.09 23852
470 리눅스 콘솔 단축키 taknim 2009.07.06 21958
469 리눅스 split | 파일 사이즈, 라인 단위 자르기 taknim 2008.06.19 20595
468 mcrypt 암호화/복호화 AES/CBC/PKCS5/PKCS7/PADDING [1] taknim 2010.03.19 19490
467 최고의 웹디자인용 작은 아이콘 다운로드 사이트 모음 : Best Small Icon Sites taknim 2007.07.11 18947
466 [mysql] 동적 쿼리 생성시 변수를 대입하거나 값을 받아오기 taknim 2009.08.17 17216
465 [MSSQL] MS-SQL 동적쿼리 이용하기 taknim 2009.12.28 16990
464 [google map api] 구글 맵스 API 로 지도 가져오기 taknim 2012.02.09 16977
463 [C/C++] prnitf 역슬래쉬 문자 taknim 2008.11.28 16255
462 EUC-KR <-> UTF-8 상호변환 하기 (문자셋charset 변환) taknim 2008.05.27 16114
461 [oracle] isqlplus 에서 특수문자(&) 입력하는 방법 taknim 2012.08.10 16081
460 [mysql] mysqlbinlog 실행시 캐릭터셋(utf8) 오류 taknim 2009.08.25 15778
459 [Oracle] DBNEWID Utility - DBNAME,DBID변경하기 taknim 2009.07.06 15582
458 inode 개념 taknim 2008.07.08 15368
457 UTF-8 을 이용해서 다국어버젼 웹사이트 개발시 고려사항 taknim 2008.10.17 15340
456 누구나 다 아는 네트워크(소켓) 통신시의 함수 pack과 unpack taknim 2008.05.17 14614
455 Postfix SMTP 서버를 이용한 IPv6 메일(SMTP) 서버 구성 taknim 2008.02.15 14448