将当前值与以前的值进行比较,如果符合条件则列出结果

Posted

技术标签:

【中文标题】将当前值与以前的值进行比较,如果符合条件则列出结果【英文标题】:Compare current value with previous and list the results if meet criteria 【发布时间】:2021-02-11 01:52:58 【问题描述】:

我有一个由Timestamplocationmetric 组成的原始表。我想生成另一个表,其中仅输出当前行低于上一行的 40% 的行以及上一条记录之间的percentage 差异。

输入示例

Timestamp location metric
2021-10:00:00 Dallas 150
2021-10:05:00 Dallas 120
2021-10:10:00 Dallas 180
2021-10:15:00 Dallas 100
2021-10:20:00 Dallas 59
2021-10:25:00 Dallas 100

预期输出

Timestamp location metric percentage
2021-10:15:00 Dallas 100 56%
2021-10:20:00 Dallas 59 59%

【问题讨论】:

【参考方案1】:

我想你想要lag():

select t.*, metric / prev_metric as ratio
from (select t.*,
             lag(metric) over (partition by location order by timestamp) as prev_metric
      from t
     ) t
where metric < 0.4 * prev_metric ;

【讨论】:

【参考方案2】:

考虑下面

select * from (
  select *, round(100 * metric / lag(metric) over win, 0) calc
  from `project.dataset.table`
  window win as (partition by location order by timestamp)
  )
where calc < 60      

如果应用于您问题中的样本数据 - 输出是

注意:我相信您的示例数据在时间戳值中有拼写错误 - 最后几行都有 2021-10:15:00 值,所以我认为这是一个拼写错误 - 因此在您的问题中修复了它

【讨论】:

以上是关于将当前值与以前的值进行比较,如果符合条件则列出结果的主要内容,如果未能解决你的问题,请参考以下文章

将 textBox 值与 FLOAT sql 进行比较

如果值与在 r 中有条件删除的值匹配,则删除行

CAS机制总结

用传统流程图表示该算法:依次将10个数输入,要求将其中最大的数输出

将对象数组中的值与 React Native/Javascript 中的字符串进行比较

将不同变量的值与其他组和自我进行比较