如何在检索之前的值之后从列中检索值

时间:2013-06-03 19:53:40

标签: sql oracle

我希望你能帮助我解决这个问题。我知道标题有点令人困惑,所以让我澄清一下。假设我的列"ORDERS"包含行"ORDER ID""ORDER #""CODE""DATE"

假设订单可以有相同的订单中的大量代码(因此此表将加入另一个,但目前不相关)并且在任何特定时间。

如果我想检索具有相同“CODE”的行的ORDER#,并且在第一个“CODE”之间,则在100小时后不应该有另一个“CODE”。但是,我还想要在100小时之后出现的第一个“代码”。

我不是在寻找确切的答案。我主要看是否有办法做到这一点。它可以用表的多个实例来完成吗?如何实现逻辑呢?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你想要的是lag()功能:

select t.*
from (select t.*,
             lag(date) over (partition by order#, code order by date) as prevdate
      from t
     ) t
where date - prevdate >= 100/24.0 or prevdate is null;

这会获取order#code组合的上一个日期。然后,它会使用相同的order#code选择距离上一行超过100小时的行。