Ik denk dat je gewoon min()
. kunt gebruiken en max()
voor de eenvoud om de tijden voor de bied/app-paren te krijgen. De rest is gewoon aggregatie en nog eens aggregatie.
De verwerking die u beschrijft, lijkt te zijn:
select avg(avg_bid_diff)
from (select bid, avg(diff*1.0) as avg_bid_diff
from (select bid, appid,
datediff(second, min(starttime), max(statustime)) as diff
from t
where appstatus in ('In Review', 'Approved')
group by bid, appid
having count(*) = 2
) ba
group by bid
) b;
Dit maakt aannames die consistent zijn met de verstrekte gegevens -- dat de statussen geen duplicaten hebben voor de bod/app-paren en dat goedkeuring altijd na beoordeling is.