일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- PHP
- jsr 296
- JSON
- Android
- Spring
- Eclipse
- swingx
- oracle
- dock
- rowspan
- jQuery
- PLSQL
- Struts
- WebLogic
- 전자정부프레임워크
- 선택적조인
- Ajax
- Google Map
- MySQL
- sencha touch
- appspresso
- iBATIS
- tomcat
- ibsheet
- 가우스
- node.js
- phonegap
- GPS
- JDOM
- 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)
;