我有下表
BidID AppID AppStatus StatusTime
1 1 In Review 2019-01-02 12:00:00
1 1 Approved 2019-01-02 13:00:00
1 2 In Review 2019-01-04 13:00:00
1 2 Approved 2019-01-04 14:00:00
2 2 In Review 2019-01-07 15:00:00
2 2 Approved 2019-01-07 17:00:00
3 1 In Review 2019-01-09 13:00:00
4 1 Approved 2019-01-09 13:00:00
我想要做的是首先通过以下逻辑计算statusTime分钟差的平均值
首先按出价ID分组,然后按AppID分组,然后计算In Review和已批准的AppStatus之间的StatusTime之间的时间差
eg
First Group BidID,Then group App ID
,然后先检查“审核中”状态并找到“下一个批准”状态,然后必须计算日期之间的最小差异
BidID AppID AppStatus BidAverage
1 -> 1,2 -> For App ID 1(2019-01-02 1hour 1.5
15:48:42.000 - 2019-01-02
12:33:36.000)
For App ID 2(2019-01-04 2hour
10:33:12.000 - 2019-01-04
10:33:12.000)
2-> 2 -> For App ID 2(2019-01-04 1 1
10:33:12.000 - 2019-01-04
10:33:12.000)
3-> 1-> No Calculation since no Approved
4-> 1-> No Calculation since no In Review before Approved
Final Average (1.5 + 1) / 2 = 1.25 for the table
我已经使用Time Dfference Exluding Weekend建议找出了David's,但不包括星期六的时差。
我不确定如何检查AppStatus是否首先在In Review中,然后是Approved,然后仅计算时间差;如果像BidID 3中一样没有Approved,则不要在平均值计算中使用它,然后取平均值在APPId和BidID之间
谢谢
答案 0 :(得分:1)
我认为您可以简单地使用min()
和max()
来获取出价/应用对的时间。剩下的只是聚合和更多聚合。
您描述的处理似乎是:
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;
做出与提供的数据一致的假设-出价/应用程序对的状态没有重复,并且批准始终在审核之后。