Jag tror att du bara kan använda min()
och max()
för enkelhets skull för att få tiderna för bud/app-paren. Resten är bara aggregering och mer aggregering.
Bearbetningen du beskriver verkar vara:
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;
Detta gör antaganden som överensstämmer med den tillhandahållna informationen -- att statusen inte har dubbletter för bud-/appparen och att godkännande alltid sker efter granskning.