SQL:如何减去属于同一ID的两个字段
我的输出如下 在上面的代码中,Tx_ID保持不变,但购买第二个条目变为空。所以我有多行 现在我必须计算第一次购买和第二次购买之间的时间差,但发送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 可以使用获取上一个值。 然后使用它来获得与当前记录的差异
谢谢。假设每个发送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很高兴我能帮上忙:-太棒了!