iT邦幫忙

0

[Oracle] 無法得到正確的查詢結果....幫幫忙!!!!

老師出了題目要我們回家做...但是我試了很多次依然無法正確跑出我要的結果...
請問該怎麼打這段程式呢?
以下是關聯圖:
https://imgur.com/87Z1z2V
題目為:
在不知道監測站名稱的情況下,試查詢監測範圍在三重與小港機場地區一氧化碳濃度最高的三個時間點,列出監測站名稱NODE_NAME、監測時間ENV_DATE及濃度ENV_CONS。 (提示:先分解查詢得到資訊再將這些查詢作為子查詢合成一個完整查詢 (1.先找到地區測站代碼與可監測一氧化碳的儀器代碼,2.可配合 rownum 欄位找到相關代碼對應之濃度最高的三個測站,3.需要三個子查詢)

我試了好幾種方法都查不到正確資料
以下是我打的
alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss' ;
SELECT NODE_NAME, ENV_DATE, ENV_CONS
FROM station s, riskdata r
WHERE s.node_id = r.node_id
AND r.sen_num in
(SELECT sen_num FROM station
WHERE node_range ='小港機場' OR NODE_RANGE='新北市三重區')
AND r.sen_num='一氧化碳分析儀'
and r.ENV_CONS IN
(SELECT ENV_CONS FROM riskdata
WHERE rownum <=3);

PS:小港機場的NODE_ID為S001,SEN_NUM為T02;
三重的NODE_ID為S003,SEN_NUM為T09;

https://imgur.com/ZIvF46a
https://imgur.com/DNQAn7V
https://imgur.com/gexpfz1
https://imgur.com/szJuwXl
https://imgur.com/DME83GJ
https://imgur.com/8PJSKvU

懇求各位大大了......
小妹不是資工背景的學生...拜託!!!謝謝了!!!

1 個回答

0
rogeryao
iT邦研究生 1 級 ‧ 2019-05-30 00:55:00
最佳解答
SELECT TEMPTABLE.NODE_RANGE,TEMPTABLE.ROW_NUM,TEMPTABLE.NODE_NAME,TEMPTABLE.ENV_DATE,TEMPTABLE.ENV_CONS
FROM (
SELECT 
ROW_NUMBER() OVER(ORDER BY RISKDATA.ENV_CONS DESC) ROW_NUM,
STATION.NODE_RANGE,STATION.NODE_NAME,RISKDATA.ENV_CONS,RISKDATA.ENV_DATE
FROM RISKDATA
LEFT JOIN SENSOR ON SENSOR.NODE_ID=RISKDATA.NODE_ID AND SENSOR.SEN_NUM=RISKDATA.SEN_NUM
LEFT JOIN STATION ON STATION.NODE_ID=SENSOR.NODE_ID
WHERE 1=1
AND SENSOR.SEN_NAME='一氧化碳分析儀'
AND ((STATION.NODE_RANGE LIKE '%小港機場%') OR (STATION.NODE_RANGE LIKE '%三重%'))
) "TEMPTABLE"
WHERE 1=1 
AND TEMPTABLE.ROW_NUM <= 3
ORDER BY TEMPTABLE.NODE_RANGE,TEMPTABLE.ROW_NUM,TEMPTABLE.NODE_NAME ;

以上程式碼未實測

miyokoya iT邦新手 5 級 ‧ 2019-05-30 13:36:29 檢舉

謝謝!!!

我要發表回答

立即登入回答