sql - 甲骨文 SQL : Selecting based on value in previous rows columns

标签 sql database oracle

我对基于返回行列表中的前一行在 Oracle 中编写 SQL 查询感到好奇。基本上我必须在我们的数据库中查询 ID # 为 2460 的所有行,但前一行(按日期排序)的 ID # 为 2463。有什么办法可以做到这一点?

抱歉,如果这是一个令人困惑或愚蠢的问题,我是个新手,不太擅长这类事情。我很乐意澄清任何需要澄清的事情。

谢谢!

编辑:

这是我根据 Gordon 的回答运行的查询,以及我得到的结果与我想要的结果的屏幕截图。

select *
from (select activitytranledger.*, lag(reasontype) over (order by trandate) as prev_reason from activitytranledger) activitytranledger
where trandate between to_date('02/7/2017','MM/DD/YYYY')
and to_date('02/8/2017','MM/DD/YYYY')
and reasontype = 2460
and prev_reason = 2463
order by trandate
;

然后我将获取位置 # 并查询特定日期。

select *
from activitytranledger
where location = 5777
and trandate between to_date('02/7/2017','MM/DD/YYYY') 
and to_date('02/8/2017','MM/DD/YYYY')
order by trandate
;

使用“Transid”我可以找到第一个查询输出的特定行。但是,它似乎没有给我想要的结果。

Wanted results (请注意“Reasontype”为 2460 的行正上方的行的原因类型为 2463)

Current results (我突出显示的行应该在我指向的列中有 2463)

编辑 2:切换 2463 和 2460

最佳答案

这是对您的问题的一种解释。使用 lag() 和一个子查询:

select t.*
from (select t.*, lag(id) over (order by date) as prev_id
      from t
     ) t
where id = 2463 and prev_id = 2460;

关于sql - 甲骨文 SQL : Selecting based on value in previous rows columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42167637/

相关文章:

MySQL-使用基于另一个表的值填充表字段

SQL 将行转置为列

sql - 如何使用 SQL Server 创建分面搜索

sql - 在sql server中高效地将行转换为列

sql-server - UPDATE 和 SELECT 同一事务中的一行

mysql - 在 MySQL 中是否有 SQL Server 的 @@error 的等价物

php - 我无法访问本地网络和 phpMyAdmin

oracle - SQLplus解码执行脚本

java - 我如何告诉我的数据库某些更改是由 hibernate 而不是其他应用程序进行的?

java - 使用 sysdate 作为参数插入数据库