在 Oracle 中按条件排名

艾森

我正在寻找将根据条件计算排名的查询,如下所示:

在此处输入图片说明

“排名指数”是我正在寻找的计算 - 如果前一时间和当前时间之间的差异小于 6 小时,则计数器应保持不变。如果超过 6 小时,则将指数提升 1。

有什么想法吗?

戈登·利诺夫

根据您的解释,最后一个值应该4不是5

使用lag()和累积总和。假设datetime列存储为date

select t.*,
       sum(case when prev_datetime > datetime - interval '6' hour then 0 else 1 end) over
           (order by datetime) as rank_index
from (select t.*,
             lag(datetime) over (order by datetime) as prev_datetime
      from t
     ) t;

注意:如果您希望每个key1/key2组合使用它,那么您希望将其包含partition by key1, key2在窗口规范中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章