クエリに group by を追加する必要があります。
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
また、適切な結合構文を使用するように結合構文を修正し、ワイルドカードがないため、「like」を「=」に変更しました。
これを表現する方法は他にもあるかもしれませんが、これは標準 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 では NULL を考慮する必要があるため、これは正確ではありません。しかし、考え方は単純です。リード関数とラグ関数を使用すると、前のトランザクションまたはテキスト トランザクションを取得できます。その後、必要に応じて最小値を見つけたり、レコードから必要なその他の情報を取得したりできます。