我有类似下面的表格。
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
答案 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'