Jeg tror, du bare kan bruge min()
og max()
for nemheds skyld for at få tiderne for bud/app-parrene. Resten er bare sammenlægning og mere sammenlægning.
Den behandling, du beskriver, ser ud til at være:
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;
Dette gør antagelser, der stemmer overens med de angivne data – at statusserne ikke har dubletter for bud/app-parrene, og at godkendelse altid er efter gennemgang.