如何查询值没有减少的记录
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)
给出样本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)