[英]Calculate Average between columns by comparing two rows in SQL Server
我有下表
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分鍾差異的平均值
首先按 BidID 分組,然后按 AppID 分組,然后計算 In Review 和 Approved 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
我不知道如何檢查 AppStatus 是否首先在審核中,然后是批准,然后只計算時間差,如果在 BidID 3 中沒有批准,則不要在平均計算中使用它,然后在整個過程中對其進行平均APPId,然后是 BidID
謝謝
我認為您可以簡單地使用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;
這做出了與提供的數據一致的假設——投標/應用對的狀態沒有重復,並且批准總是在審查之后。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.