2016-05-04 38 views
1

我試圖通過設施(給我6種不同的活動)和(2)由設施和部門(給我11種不同的活動)來找出哪個活動需要最長時間(1)。各組中最長的項目

此代碼只給我一個迴應時,

SELECT NOC.FCILTY_ID, NAC.ACTIVITY_ID, NAC.ELAPSED_SECONDS 
FROM NAC, NOC 
WHERE NAC.OBS_ID=NOC.OBS_ID 
AND NAC.ELAPSED_SECONDS IN (SELECT MAX(NAC.ELAPSED_SECONDS) FROM NAC, NOC 
GROUP BY NOC.FCILTY_ID) 
ORDER BY NOC.FCILTY_ID; 

的一些數據和代碼的例子來獲取一些數據在下面給出。

SELECT NAC.OBS_ID, NOC.FCILTY_ID, NOC.DEPT_NO, NAC.ACTIVITY_ID, NAC.ACTIVE_SECONDS, NAC.CAT 
FROM NAC, NOC 
WHERE NAC.OBS_ID = NOC.OBS_ID; 

OBS_ID FCILTY_ID DEPT_NO ACTIVITY_ID ACTIVE_SECONDS CAT 
1  A   a   132   73.9999584  Motion 
2  A   a   133   92.000016  Operations 
3  A   a   134   198.0000288  Operations 
4  A   a   135   54.9999936  Error/Defect 
5  A   a   136   79.0000128  Error/Defect 
6  A   a   137   57.9999744  Operations 
+0

我的意思是甲骨文,SQL服務器,MySQL或其他? – Mihai

+0

@Mhaihai SQLDeveloper –

+0

含義Oracle。 (SQL Developer不是數據庫產品,它只是訪問Oracle的用戶界面或用戶界面之一)。 – mathguy

回答

1

使用CTE添加ROW_NUMBER爲每個需要分組,非農的設施和rnfd的設施和部門

WITH CTE AS 
(SELECT NAC.OBS_ID, NOC.FCILTY_ID, NOC.DEPT_NO, NAC.ACTIVITY_ID, NAC.ACTIVE_SECONDS, NAC.CAT, 
ROW_NUMBER() OVER(PARTITION BY NOC.FCILTY_ID ORDER BY ACTIVE_SECONDS DESC) as rnf, 
ROW_NUMBER() OVER(PARTITION BY NOC.FCILTY_ID,NOC.DEPT_NO ORDER BY ACTIVE_SECONDS DESC) as rnfd 
FROM NAC, NOC 
WHERE NAC.OBS_ID = NOC.OBS_ID) 
SELECT NAC.OBS_ID, NOC.FCILTY_ID, NOC.DEPT_NO, NAC.ACTIVITY_ID, NAC.ACTIVE_SECONDS, NAC.CAT FROM CTE 
WHERE rnf=1 OR rnfd =1 

編輯 爲2個獨立的查詢

..WHERE rnf=1 

..WHERE rnfd =1 
+0

你可以向我解釋這段代碼嗎? –

1

您需要加入子查詢。這是一種方法。

with maxInterval as 
(select cat theCat, max(active_seconds) longestTime 
from etc 
group by cat 
) 

select whatever 
from yourTables join maxInterval on cat = theCat 
and active_seconds = longestTime 
+0

請問你能解釋一下最後三行給我 –

+0

請問你能解釋最後三行給我嗎? –

相關問題