SQL 질문 드립니다.
게시판에서 검색을 해봤는데 답을 찾기 어렵네요..ㅜㅜ
MSR_DATE |
SITE_ID |
DEVICE_ID |
ITEM_VAL |
20100522000000 |
102 |
TN |
0.3330 |
20100522000100 |
102 |
COD |
-0.8133 |
20100522000100 |
102 |
NH4 |
0.0142 |
20100522000100 |
102 |
NO2 |
0.0245 |
20100522000100 |
102 |
PO4 |
0.3790 |
20100522000100 |
102 |
TP |
0.0129 |
20100522000200 |
102 |
NO3 |
0.0276 |
20100522010100 |
102 |
NH4 |
0.0115 |
20100522010100 |
102 |
NO3 |
0.0100 |
20100522010100 |
102 |
PO4 |
0.1489 |
20100522020000 |
102 |
TN |
0.3704 |
20100522020100 |
102 |
COD |
-0.8888 |
20100522020100 |
102 |
NO2 |
0.0245 |
20100522020100 |
102 |
TP |
0.0123 |
20100522020200 |
102 |
NH4 |
0.0197 |
20100522020200 |
102 |
NO3 |
0.0186 |
20100522020200 |
102 |
PO4 |
0.0028 |
20100522030100 |
102 |
NH4 |
0.0116 |
20100522030100 |
102 |
PO4 |
0.0050 |
20100522030200 |
102 |
NO3 |
0.0073 |
20100522040000 |
102 |
TN |
0.2421 |
저장된 데이터는 위와 같은 포멧으로 저장됩니다.
위와 같은 형태로 저장된 데이터를 같은 시간에 대해서
MSR_DATE |
TN |
TP |
COD |
05-13 00h |
-0.0247 |
0.0044 |
1.9744 |
05-13 02h |
-0.0275 |
0.0042 |
1.8625 |
05-13 04h |
-0.0246 |
|
1.7924 |
05-13 06h |
-0.0326 |
0.0072 |
2.7022 |
05-13 08h |
-0.0323 |
0.0149 |
2.7590 |
05-13 10h |
-0.0189 |
0.0104 |
2.2663 |
05-13 12h |
-0.0201 |
0.0086 |
2.7496 |
05-13 20h |
0.5166 |
|
|
05-13 22h |
0.4213 |
0.0187 |
|
05-14 00h |
0.0005 |
0.0190 |
|
05-14 02h |
0.3640 |
0.0173 |
|
05-14 04h |
0.4788 |
0.0256 |
|
05-14 06h |
0.5131 |
0.0221 |
|
05-14 08h |
0.4834 |
0.0184 |
|
05-14 10h |
0.4698 |
0.0185 |
|
처럼 데이터를 조회하려고 합니다.
아래와 같이 SQL을 작성해서 데이터를 조회하면 정상적으로 되는 것 같은데 가끔 데이터의 뒷 부분에 조인이 되지 않는 데이터가 출력되는 것 같습니다. 뭐가 문제일까요??
SELECT A.MSR_DATE, B.TN, C.TP, D.COD
FROM
(SELECT distinct SUBSTR(MSR_DATE,5,2) || '-' || SUBSTR(MSR_DATE,7,2) || ' ' || SUBSTR(MSR_DATE,9,2) || 'h' AS MSR_DATE FROM SD_DATA_DEVICE_RAW_TB WHERE SITE_ID = '102' AND DEVICE_ID IN ('TN', 'TP', 'COD') AND MSR_DATE >= '20100513000000' AND MSR_DATE < '20100523235900' ORDER BY MSR_DATE) A,
(SELECT SUBSTR(MSR_DATE,5,2) || '-' || SUBSTR(MSR_DATE,7,2) || ' ' || SUBSTR(MSR_DATE,9,2) || 'h' AS MSR_DATE, ITEM_VAL AS TN FROM SD_DATA_DEVICE_RAW_TB WHERE SITE_ID = '102' AND MSR_DATE >= '20100513000000' AND MSR_DATE < '20100523235900' AND DEVICE_ID = 'TN' ORDER BY MSR_DATE) B,
(SELECT SUBSTR(MSR_DATE,5,2) || '-' || SUBSTR(MSR_DATE,7,2) || ' ' || SUBSTR(MSR_DATE,9,2) || 'h' AS MSR_DATE, ITEM_VAL AS TP FROM SD_DATA_DEVICE_RAW_TB WHERE SITE_ID = '102' AND MSR_DATE >= '20100513000000' AND MSR_DATE < '20100523235900' AND DEVICE_ID = 'TP' ORDER BY MSR_DATE) C,
(SELECT SUBSTR(MSR_DATE,5,2) || '-' || SUBSTR(MSR_DATE,7,2) || ' ' || SUBSTR(MSR_DATE,9,2) || 'h' AS MSR_DATE, ITEM_VAL AS COD FROM SD_DATA_DEVICE_RAW_TB WHERE SITE_ID = '102' AND MSR_DATE >= '20100513000000' AND MSR_DATE < '20100523235900' AND DEVICE_ID = 'COD' ORDER BY MSR_DATE) D
WHERE A.MSR_DATE = B.MSR_DATE(+) AND A.MSR_DATE = C.MSR_DATE(+) AND A.MSR_DATE = D.MSR_DATE(+);
그리고, 위와 같은 데이터에서 원하는 데이터를 얻기 위해서 좋은 SQL을 어떤식으로 작성하는 것이 조은 방법인지 조언 부탁드립니다.