在Oracle的同一张表中找到以秒为单位的时差

时间:2018-07-14 15:38:20

标签: sql oracle

我有类似下面的表格。

Transaction_ID      step_id       datetime                          City
---------------------------------------------------------------------------
abc                   2a          14-JUL-18 13:33:03.48783          London
abc                   2b          14-JUL-18 13:33:06.48786          London
abc                   2c          14-JUL-18 13:33:06.48786          London
def                   2a          14-JUL-18 13:34:20.48786          London
def                   2b          14-JUL-18 13:34:22.48786          London
def                   2c          14-JUL-18 13:34:22.48786          London

我喜欢通过对transaction_id进行分组来获取step_id 2a和2b中的时差。我已经形成如下查询。但它仅适用于特定的交易ID。我想列出所有交易ID。

请帮助我。

SELECT
    c.Transaction_ID,
    (C1.datetime - (
                    SELECT
                        datetime 
                    FROM
                        myTable
                    WHERE 
                        Transaction_ID = 'abc'
                        AND step_id = '2b'
                    )) AS TIMEDIFFERNCE
FROM
    myTable c 
    INNER JOIN myTable C1 ON c.TRANSACTION_ID = C1.TRANSACTION_ID 
                                AND c.step_id = C1.step_id
WHERE
    c.City = 'London'
    AND c.datetime >=  '14-JUL-18 10:58:01' 
    AND c.datetime  <=  '15-JUL-18 00:00:01'
    AND c.Transaction_ID = 'abc'
    AND c.step_id ='2a'
ORDER BY
    c.datetime desc;

预期结果是

Transaction_ID     timediffInseconds 
------------------------------------
abc                   3
def                   2

2 个答案:

答案 0 :(得分:3)

我想你想要

SELECT t2a.Transaction_ID,
      (t2b.datetime - t2a.datetime)*(24*60*60) AS diff_in_secs
FROM myTable t2a INNER JOIN
     myTable t2b
     ON t2b.TRANSACTION_ID = t2a.TRANSACTION_ID AND
WHERE t2b.step_id = '2b' AND
      t2a.step_id = '2a' AND
      t2a.City = 'London' AND
      t2a.datetime >=  '14-JUL-18 10:58:01' AND 
      t2a.datetime  <=  '15-JUL-18 00:00:01' AND
ORDER BY c.datetime desc;

答案 1 :(得分:0)

您可以使用以下查询:

SELECT
    Transaction_ID, 
    (MAX(datetime) - MIN(datetime))*(24*60*60) AS timediffInseconds
FROM
    myTable
WHERE
    step_id IN ('2a', '2b')
    AND City = 'London'
    AND datetime BETWEEN '2018-07-14 10:58:01' AND '2018-07-15 00:00:01'
GROUP BY
    Transaction_ID
HAVING
    MIN(step_id) = '2a'
    AND MAX(step_id) = '2b'