iT邦幫忙

0

[Oracle] 急需幫忙!!!!

關聯圖:
https://imgur.com/87Z1z2V
https://imgur.com/DNQAn7V

題目:試查詢各監測器所量到監測物質濃度最高的時間點,列出測站名稱NODE_NAME,監測物質 (即監測功能) SEN_FUNC,最高濃度時間與濃度(ENV_DATE、MAX(ENV_CONS)),並依測站代碼NODE_ID由小到大排序。 (提示:1.查詢感測器編號與最高濃度時可延伸 IN 的觀念同時讓兩個欄位(a,b)符合對應之資料,例如 WHERE (a,b) IN (…),其中(…)呈現兩欄的資料;2.先利用 sensor 與 riskdata 做自然合併以查詢對應監測器編號之測站編號與對應之最高濃度及時間;3. 將 station 與此子查詢之測站編號做自然合併以列出要求之欄位;4.共有兩個子查詢)

我打的:
select NODE_NAME,SEN_FUNC,ENV_DATE,ENV_CONS
from station natural join
(select SEN_FUNC, ENV_DATE, ENV_CONS
from sensor NATURAL JOIN riskdata
WHERE (SEN_NUM,ENV_CONS) IN
(SELECT SEN_NUM,ENV_CONS FROM riskdata
GROUP BY SEN_NUM
HAVING MAX(ENV_CONS))
ORDER BY NODE_ID ASC;

無法查詢~~請幫忙!!

1 個回答

0
rogeryao
iT邦高手 6 級 ‧ 2019-05-30 20:54:50
SELECT TEMPTABLE.NODE_ID,TEMPTABLE.NODE_NAME,TEMPTABLE.SEN_NUM,
SENSOR.SEN_FUNC,TEMPTABLE.MAXField,RISKDATA.ENV_DATE
FROM (
SELECT STATION.NODE_ID,STATION.NODE_NAME,SENSOR.SEN_NUM,
MAX(RISKDATA.ENV_CONS) OVER(PARTITION by STATION.NODE_ID,STATION.NODE_NAME,SENSOR.SEN_NUM) as MAXField
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
) "TEMPTABLE"
LEFT JOIN RISKDATA ON RISKDATA.NODE_ID=TEMPTABLE.NODE_ID AND RISKDATA.SEN_NUM=TEMPTABLE.SEN_NUM
LEFT JOIN SENSOR ON SENSOR.NODE_ID=RISKDATA.NODE_ID AND SENSOR.SEN_NUM=RISKDATA.SEN_NUM
WHERE 1=1
ORDER BY TEMPTABLE.NODE_ID

以上程式碼未實測

我要發表回答

立即登入回答