Je pense que vous pouvez simplement utiliser min()
et max()
pour plus de simplicité, obtenir les temps pour les paires enchère/application. Le reste n'est que de l'agrégation et encore de l'agrégation.
Le traitement que vous décrivez semble être :
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;
Cela fait des hypothèses qui sont cohérentes avec les données fournies :que les statuts n'ont pas de doublons pour les paires enchère/application et que l'approbation est toujours après examen.