Sql 如何查询未减少值的记录

Sql 如何查询未减少值的记录,sql,oracle,oracle11g,oracle12c,Sql,Oracle,Oracle11g,Oracle12c,给出一个样本表 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

给出一个样本表

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
我想查询字段3在一段时间内没有变化的字段1。在这种情况下,我只需要选择字段3在2016年9月2日和2016年9月4日之间没有变化的类别2


有人能帮忙吗?

如果我理解正确,您可以查看
min()
max()
值并进行比较:

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

如果我理解正确,您可以查看
min()
max()
值并进行比较:

select field1
from t
group by field1
having min(field3) = max(field3);
表格设置:

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
查询选择符合条件的所有行/列。

表设置:

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

查询选择所有符合条件的行/列。

那么您只需要找到字段1,其中只有一个不同的字段3值

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

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

那么您只需要找到字段1,其中字段3只有一个不同的值

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

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

我想排除字段1,即使一个字段3不同,我只想在所有字段3的值在任何日期范围内都没有变化的情况下进行选择。@Boopathi。这就是这个查询的作用。您可能需要一个
where
子句来指定日期范围。我想排除字段1,即使有一个字段3不同,我只想在所有字段3的值在任何日期范围之间都没有变化的情况下进行选择。@Boopathi。这就是这个查询的作用。您可能需要一个
where
子句来指定日期范围。它对我有用。选择Field1,按count(Field3)=1和count(distinct field2)>1的Field1从sol s组中计数(distinct Field3)cnt。第二个条件是避免单行字段。我使用下面的查询获得结果。它对我有用。选择Field1,按count(Field3)=1和count(distinct field2)>1的Field1从sol s组中计数(distinct Field3)cnt。避免单行字段的第二个条件。