SQL:如何减去属于同一ID的两个字段

SQL:如何减去属于同一ID的两个字段,sql,oracle11g,Sql,Oracle11g,我的输出如下 在上面的代码中,Tx_ID保持不变,但购买第二个条目变为空。所以我有多行 现在我必须计算第一次购买和第二次购买之间的时间差,但发送ID始终保持不变 任何建议,非常感谢 谢谢。假设每个发送ID只有两个条目,您可以尝试以下方法: SELECT Tx_ID,SUBTRACT(MAX(Tx_Time),MIN(Tx_Time)) FROM Tx_Table GROUP BY Tx_ID HAVING count(*) > 1 可以使用获取上一个值。 然后使用它来获得与当前记录的差异

我的输出如下

在上面的代码中,Tx_ID保持不变,但购买第二个条目变为空。所以我有多行

现在我必须计算第一次购买和第二次购买之间的时间差,但发送ID始终保持不变

任何建议,非常感谢


谢谢。

假设每个发送ID只有两个条目,您可以尝试以下方法:

SELECT Tx_ID,SUBTRACT(MAX(Tx_Time),MIN(Tx_Time)) FROM Tx_Table GROUP BY Tx_ID HAVING count(*) > 1
可以使用获取上一个值。 然后使用它来获得与当前记录的差异

SELECT 
 t.*, 
 t.tx_time - LAG(t.tx_time) OVER (PARTITION BY t.tx_id ORDER BY t.tx_time) AS timestamp_diff 
FROM YOUR_TABLE t

以下内容应在第一次和第二次之间进行精确比较,以获得发送ID

SELECT   tx_id, 
         Subtract(Max(tx_time),Min(tx_time)) 
FROM     tx_table T1 
WHERE    tx_time >= 
         ( 
                SELECT Max(tx_time) 
                FROM   tx_table T2 
                WHERE  tx_time < 
                       ( 
                              SELECT Max(tx_time) 
                              FROM   tx_table 
                              WHERE 
                              and    tx_id = t1.tx_id) 
                AND    tx_id = t1.tx_id) 
GROUP BY tx_id 
HAVING   count(*) > 1

提示:如果您使用的是sql server 2012和above@saravanatn,我正在使用Oracle DB。如果有两次以上的购买怎么办?@GordonLinoff,我已验证,每个Tx_ID只参与了两次或更少的购买,但不超过两次。您的逻辑对我来说不是100%有效,但您的解决方案中存在错误,我已经找到了适合我的东西。对于Oracle,您不需要使用减法或DATEDIFF函数,并且可以自动减去两个日期。谢谢。@Ten Coin很高兴我能帮上忙:-太棒了!