【问题标题】:How to ignore value increasing rows in Oracle11如何忽略 Oracle 11g 中增加值的行
【发布时间】:2017-08-08 19:03:25
【问题描述】:

所以我有一个表,其中有一个值列表,我需要按日期排序并忽略数字大于前一个数字的行。取下表:

Date            Value
01/01/2017      10
01/02/2017      9
01/03/2017      8
01/04/2017      10//Ignore this because previous entry is less(8<10)
01/05/2017      9...

所以当我做一个选择是什么是返回:

10
9
8
9

这甚至可以仅使用查询吗?

提前感谢您的帮助。

【问题讨论】:

  • 所以基本上你在寻找最长的趋势?请描述您想要实现的目标。
  • 不只是想忽略前一个条目较少的行
  • 以下两种解决方案都有效。非常感谢你们都很棒

标签: sql database oracle11g


【解决方案1】:

我想你想要lag():

select value
from (select t.*, lag(value) over (order by date) as prev_value
      from t
     ) t
where prev_value is null or prev_value > value;

【讨论】:

    【解决方案2】:

    你可以使用LAG:

    WITH cte AS (
      SELECT *, LAG(Value,1,0) OVER(ORDER BY Date) AS prev
      FROM your_table
    )
    SELECT *
    FROM cte
    WHERE Value > prev;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-09
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      相关资源
      最近更新 更多