2014-09-22 83 views
0

我正在嘗試計算達到給定數量所需的平均數量。將其視爲銷售環境:數據庫中的每條記錄都表示已撥打電話。其中一列中有一個標記表示是否進行了銷售。我創建了一些能夠返回達到給定數字所需條目的數量,但是,我希望它在達到該數字後「重置」,然後再次開始計數,直到所有數據都已經檢查。達到給定數量所需記錄的平均數量

表看起來像下面:

UID | DATE  | TIME  | NAME1 | SUBNAME1 | SUCCESS? | 
1 | 01/01/2014 | 09:00:00 | Test1 | SubTest1 | 0  | 
2 | 01/01/2014 | 09:01:00 | Test1 | SubTest1 | 1  | 
3 | 01/01/2014 | 09:02:00 | Test1 | SubTest1 | 0  | 
4 | 01/01/2014 | 09:03:00 | Test1 | SubTest1 | 1  | 
5 | 01/01/2014 | 09:04:00 | Test1 | SubTest1 | 1  | 
6 | 01/01/2014 | 09:05:00 | Test1 | SubTest1 | 1  | 
7 | 01/01/2014 | 09:06:00 | Test1 | SubTest1 | 0  | 
8 | 01/01/2014 | 09:07:00 | Test1 | SubTest1 | 1  | 
9 | 01/01/2014 | 09:08:00 | Test1 | SubTest1 | 0  | 
10 | 01/01/2014 | 09:09:00 | Test1 | SubTest1 | 0  | 
11 | 01/01/2014 | 09:11:00 | Test1 | SubTest1 | 0  | 
12 | 01/01/2014 | 09:12:00 | Test1 | SubTest1 | 0  | 
13 | 01/01/2014 | 09:13:00 | Test1 | SubTest1 | 0  | 
14 | 01/01/2014 | 09:14:00 | Test1 | SubTest1 | 1  | 

如果我想知道有多少電話都需要達到三個銷售,我的查詢將返回最初5.我希望做的是檢查整個表並返回平均值 - 在這種情況下爲7。

下面看到查​​詢迄今:

WITH CTE AS 
(
    SELECT UID, NAME1, SUBNAME1, 
    COUNT(CASE WHEN SUCCESS = 1 THEN 1 ELSE NULL END) 
    OVER (ORDER BY UID ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 
     AS RunningTotal 
    FROM dev.dbo.t1 
    WHERE Name1 = 'Test1' 
    AND Subname1 = 'SubTest1' 
) 
SELECT count(*)+1 AS [Count] 
FROM CTE 
WHERE RunningTotal < 3 

任何幫助表示讚賞。我使用的Microsoft SQL Server 2008 R2(SP1) - 10.50.2500.0(X64)

感謝

+0

sqlfiddle將幫助 – Mihai 2014-09-22 15:24:37

回答

0

如果你想呼叫的平均數量達到3,我想你可以計數的數數據庫中的行數,成功次數。該比率是每次成功的平均通話次數。這個值是三次成功的平均值。

select count(*) as NumCalls, sum(Success) as Success, 
     3.0 * count(*)/sum(Success) as AvgPer3 
from dev.dbo.t1 t1; 

這應該是非常接近你想要的。如果你想要取得成功或取得第三個成功,可能會有小的調整。

相關問題