您需要通過在您的查詢中添加一個分組:
select a.account_id, a.transaction_id, min(time_between) as min_time_between
from (select a.account_id, a.transaction_id, b.transaction_date, a.transaction_date,
round(a.transaction_date - b.transaction_date, 0) as Time_between
from time_between_trans a join
time_between_trans b
on a.transaction_date > b.transaction_date and
a.account_ID ='717724' and
a.account_id = b.account_id
) a
group by a.account_id, a.transaction_id
我也是固定的連接語法使用正確的聯接語法,並改變了「喜歡」到「=」,因爲你沒有通配符。
可能有其他的方法來表達這一點,但這是標準的SQL。您應該指定您在問題中使用的數據庫。
如果您使用的是Oracle,那麼就請執行以下操作:
select a.*,
(case when nextdt - transaction_date) < transaction_date - nextdt
then nextdt - transaction_date)
else transaction_date - nextdt
end) as mintime
from (select a.*,
lead(transaction_date, 1) over (partition by account_id order by transaction_date) as nexttd,
lag(transaction_date, 1) over (partition by account_id order by transaction_date) as prevtd
from time_between_trans a
) a
其實,這是不完全正確的,因爲你必須要空值考慮了nexttd和prevtd。但是,這個想法很簡單。領先和滯後功能可讓您進行prev或文本交易,然後您可以執行任何您想要的最低限度的操作 - 或從記錄中獲取所需的任何其他信息。
謝謝! 如果我也想對結果查詢你將如何做到這一點的日期?我一直在嘗試,但只是「列明確定義」錯誤。 我正在使用Oracle。 – Regan 2012-07-30 02:30:37