Ich denke, Sie können einfach min()
verwenden und max()
der Einfachheit halber, um die Zeiten für die Gebots-/App-Paare zu erhalten. Der Rest ist nur Aggregation und noch mehr Aggregation.
Die von Ihnen beschriebene Verarbeitung scheint zu sein:
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;
Dadurch werden Annahmen getroffen, die mit den bereitgestellten Daten übereinstimmen – dass die Status keine Duplikate für die Gebots-/App-Paare aufweisen und dass die Genehmigung immer nach Überprüfung erfolgt.