老師出了題目要我們回家做...但是我試了很多次依然無法正確跑出我要的結果...
請問該怎麼打這段程式呢?
以下是關聯圖:
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
懇求各位大大了......
小妹不是資工背景的學生...拜託!!!謝謝了!!!
一氧化碳分析儀在sensor表裡,只出現在S002、S003、S004
S001小港機場不會出現
發文者所寫的sql AND r.sen_num='一氧化碳分析儀'
改成 AND r.sen_name='一氧化碳分析儀'
用rownum找出前三筆最高值,原始查詢的sql要包在裡面,用rownum的sql包起來
範例:
select * from
(select c1, c2, c3
from t1
order by c3 desc)
where rownum <= 3
以上參考
Select * From
(Select r.NODE_NUM, r.NODE_NAME, r.NODE_FUNC,s.NODE_ID, s.NODE_RANGE , rownum as row From
(Select NODE_NUM, NODE_NAME, NODE_FUNC, NODE_ID,s.NODE_RANGE From
(Select NODE_ID, NODE_RANGE From STATION Where NODE_ID='S001' or NODE_ID='S003') s, SENSOR
Where NODE_ID = s.NODE_ID and SEN_NAME = '一氧化碳分析儀' )r
Where SEN_NUM = r.NODE_NUM and NODE_ID = s.NODE_ID
order by ENV_CONS desc)r1
Where r1.row <= 3
不知道是不是這樣