2016-09-04 66 views
1

給定一個示例表如何查詢其值不減少

Field 1 | Field 2 | Field 3 
------------------------------ 
class1 | 02-09-2016 | 10.00 
Class1 | 03-09-2016 | 09.20 
Class1 | 04-09-2016 | 08.00 
class2 | 02-09-2016 | 10.00 
Class2 | 03-09-2016 | 10.00 
Class2 | 04-09-2016 | 10.00 
class3 | 02-09-2016 | 33.32 
Class3 | 03-09-2016 | 40.12 
Class3 | 04-09-2016 | 10.20 

我要查詢的字段1爲其字段3是不會改變一段時間記錄。在這種情況下,我需要僅選擇Class2在02-09-2016 & 04-09-2016之間沒有變化的class2。

有人可以幫忙嗎?

回答

0

表設置:

create table so1 (field1 varchar2(100), field2 varchar2(100), field3 varchar2(100)) 

insert into so1 
    select * 
    from (
     select 'class1', '02-09-2016', '10.00' from dual union all 
     select 'Class1', '03-09-2016', '09.20' from dual union all 
     select 'Class1', '04-09-2016', '08.00' from dual union all 
     select 'class2', '02-09-2016', '10.00' from dual union all 
     select 'Class2', '03-09-2016', '10.00' from dual union all 
     select 'Class2', '04-09-2016', '10.00' from dual union all 
     select 'class3', '02-09-2016', '33.32' from dual union all 
     select 'Class3', '03-09-2016', '40.12' from dual union all 
     select 'Class3', '04-09-2016', '10.20' from dual 
    ) 

查詢:

select field1, field2, field3 
    from (
     select s.*, 
       count(distinct field3) over (partition by upper(field1)) cnt 
      from so1 s 
     ) 
where cnt = 1 

的查詢選擇滿足條件的所有行/列。

+0

我用下面的查詢來得到結果。它爲我工作。選擇Field1,通過field1計數(field3)= 1並計數(distinct field2)> 1的sol1組計數(distinct Field3)cnt。避免單行字段的第二個條件。 – Boopathi

0

如果我理解正確的話,你可以看看min()max()值並加以比較:

select field1 
from t 
group by field1 
having min(field3) = max(field3); 
+0

我要排除的字段1甚至一個字段3做的是不同的,我想選擇只有當所有字段3的值沒有任何日期範圍之間變化.. – Boopathi

+0

@Boopathi。 。 。這就是這個查詢所做的。你可能需要一個'where'子句來指定日期範圍。 –

0

那麼你想要的只是找到只有一個不同的field3值的field1?

,其與分組和HAVING子句

Select Distinct field1 from table t 
Where not exists 
    (Select * from table 
    where field1 = t.field1 
    having count(distinct field3) > 1)