Oracle SQL - 如何在同一行中的值之间获取差异,没有唯一ID

时间:2017-08-20 23:14:23

标签: sql oracle

我正在学习Oracle SQL。

我需要确定给定产品的每次购买/退货交易之间的时间。

数据样本如下所示。没有唯一的交易标识符将购买与退货联系起来但是,我可以假设购买后立即返回(基于交易时间)是同一交易。

你能告诉我怎么解决这个问题吗?我们非常感谢SQL语句示例。

Product TransactionType  TransactionTime
A       PURCHASE         18-Aug-17 10.15.56.000000 AM
A       RETURN           18-Aug-17 10.30.21.000000 AM
A       PURCHASE         18-Aug-17 11.10.35.000000 AM
A       RETURN           18-Aug-17 11.12.52.000000 AM
B       PURCHASE         18-Aug-17 10.15.56.000000 AM
B       RETURN           18-Aug-17 10.22.56.000000 AM
B       PURCHASE         18-Aug-17 10.30.21.000000 AM
B       RETURN           18-Aug-17 10.31.21.000000 AM

1 个答案:

答案 0 :(得分:1)

您可以使用lead()

select t.*,
       (next_ttime - transactiontime) as time_to_return
from (select t.*,
             lead(transactiontype) over (partition by product order by transactiontime) as next_ttype,
             lead(transactiontime) over (partition by product order by transactiontime) as next_ttime
      from t
     ) t
where transactiontype = 'PURCHASE' and
      next_ttype = 'RETURN'