2012-02-23 98 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