如何查询值没有减少的记录

how to query records which value is not reducing

给出样本table

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

我想查询Field1一段时间内没有变化的Field3。在这种情况下,我只需要 select class2,其 Field3 在 02-09-2016 和 04-09-2016 之间没有变化。

有人可以帮忙吗?

如果我没理解错的话,你可以看看min()max()的值并比较一下:

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

Table 设置:

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

查询选择所有 rows/columns 满足条件。

那么您只想找到字段 3 只有一个不同值的字段 1?

这是通过分组和 Having 子句完成的

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