일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- tomcat
- 가우스
- GPS
- jQuery
- Google Map
- PHP
- Eclipse
- ibsheet
- swingx
- WebLogic
- JSON
- Android
- phonegap
- node.js
- JDOM
- 전자정부프레임워크
- Ajax
- oracle
- sencha touch
- rowspan
- MySQL
- 선택적조인
- Struts
- jsr 296
- appspresso
- PLSQL
- Spring
- iBATIS
- dock
- MFC
Archives
- Today
- Total
Where The Streets Have No Name
최대,최소값을 제외한 자료 조회(3건이상에서) 본문
SELECT A.*
FROM (SELECT SABUN,
SDATE,
ROW_NUMBER () OVER (PARTITION BY SABUN ORDER BY SDATE)
AS RN_MIN,
ROW_NUMBER () OVER (PARTITION BY SABUN ORDER BY SDATE DESC)
AS RN_MAX,
COUNT (SABUN) OVER (PARTITION BY SABUN) AS RN_CNT
FROM TB_100
WHERE COM_CD = 'AA'
AND '20071001' <= SDATE) A
WHERE CASE WHEN RN_CNT >= 3 THEN A.RN_MIN
ELSE 1
END
<>
CASE WHEN RN_CNT >= 3 THEN 1
ELSE 2
END
AND CASE WHEN RN_CNT >= 3 THEN A.RN_MAX
ELSE 1
END
<>
CASE WHEN RN_CNT >= 3 THEN 1
ELSE 2
END
;
sabun단위로 partition이 설정되므로 sabun단위의 건수가 3건 미만일 경우
where절의 조건이 1 <> 2 가 되므로 항상 true가 됩니다.
3건이 넘어서면 rn_min,rn_max는 1의 값을 가지며 1 <> 1가 되므로 항상
false의 결과가 나오면서 최대,최소값을 제외할수 있게 됩니다.
SELECT A.*
FROM (SELECT SABUN,
SDATE,
ROW_NUMBER () OVER (PARTITION BY SABUN ORDER BY SDATE)
AS RN_MIN,
ROW_NUMBER () OVER (PARTITION BY SABUN ORDER BY SDATE DESC)
AS RN_MAX,
COUNT (SABUN) OVER (PARTITION BY SABUN) AS RN_CNT
FROM TB_100
WHERE COM_CD = 'AA'
AND '20071001' <= SDATE) A
WHERE DECODE (SIGN (A.RN_CNT-3), -1, 1, A.RN_MIN)
<>
DECODE (SIGN (A.RN_CNT-3),-1, 2,1)
AND DECODE (SIGN (A.RN_CNT-3), -1, 1, A.RN_MAX)
<>
DECODE (SIGN (A.RN_CNT-3),-1, 2,1)
;