2012-02-23 85 views
0

有一個快速的谷歌,看看這是否可以沒有太多的運氣,但有沒有什麼辦法在oracle sql返回的最小值的東西,但超過一定數量(即最小值高於負數)。目前我使用這行代碼Oracle SQL發現最小值高於某個閾值

min(ROUND(IA.ASM_START_DATE -REF.ASM_START_DATE,0)) over (partition by IA.ASM_ID) min_wk 

要返回由ID分組最低的區別 - 它的工作到一個點,但我想它帶回最低差高於-10。理想情況下,我試圖在select中實現這一點,而不是使用where查詢,因​​爲我想用它來識別問題,但不能完全從報告中排除它們。

+0

沒有嘗試這一點,但離我的頭頂,也許使用min> -10? – Limey 2012-02-23 17:03:09

+0

如果您發佈了完整的SQL語句,它會更有用。另外,你的意思是「我試圖在select中實現這一點,而不是使用where查詢,因​​爲我想用它來識別問題,但不能完全排除它們。」你是否希望輸出包含小於-10的值?如果沒有,我認爲在WHERE子句中排除它們是合乎邏輯的。您可以在SELECT列表中做的最好的做法是將它們「重新映射」爲不同的值,如ABS所做的那樣。但是我不清楚爲什麼你會那樣做。 – 2012-02-23 17:17:59

+0

該查詢非常大,所以我不想將它全部發布,因爲我不認爲它會使它更清晰。這是很難解釋簡潔,我認爲有一個更好的方式來實現我想要做的事情,但我認爲這可能有助於至少讓它工作,然後可能發佈它來說明我想要的實現(並改善)! – bawpie 2012-02-23 19:33:04

回答

2

一個簡單的黑客是使用case語句設置太低任何值爲null所以他們不會改變最小:

min(case when ROUND(IA.ASM_START_DATE -REF.ASM_START_DATE,0)<-10 then null else ROUND(IA.ASM_START_DATE -REF.ASM_START_DATE,0) end) over (partition by IA.ASM_ID) 
+0

啊,是的,這是有道理的。我確實考慮過這個問題,但並不確定是否使用min(我正在考慮把min放在case中,然後認爲它不起作用)。明天會試試這個,非常感謝。 – bawpie 2012-02-23 19:24:40