【问题标题】:how to query records which value is not reducing如何查询值没有减少的记录
【发布时间】:2017-01-12 07:39:41
【问题描述】:

给定一个示例表

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

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

有人可以帮忙吗?

【问题讨论】:

    标签: sql oracle oracle11g oracle12c


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      表设置:

      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
      

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

      【讨论】:

      • 我使用下面的查询来获得结果。它对我有用。从 sol s group by field1 中选择 Field1,count(distinct Field3) cnt,count(field3) = 1 且 count(distinct field2) > 1。第二个条件是避免单行字段。
      【解决方案3】:

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

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

      【讨论】:

      • 我想排除 Field1,即使一个 Field3 不同,我只想在所有 Field3 值在任何日期范围之间都没有变化的情况下选择..
      • @Boopathi 。 . .这就是这个查询的作用。您可能需要一个where 子句来指定日期范围。
      猜你喜欢
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 2021-08-20
      相关资源
      最近更新 更多