2015-11-14 29 views
0

對於一個給定的當前客戶,我試圖找出他們有多少連續的幾年他們已經與我們續簽了一項政策。我對如何做到這一點的想法是將當前行中的字段與前一行進行匹配。我試圖爲此寫一個函數,但如果有更簡單的方法,請讓我知道。以下是我對功能連續行的有條件計數

Option Compare Database 
'Renewal Count Returns count of consecutive renewals 
Public Function RenewCount(strLocationID As Integer, _ 
        strQuoteID As Integer, _ 
        strOriginalQuoteID As Variant) As String 
Static strLastLocationID As Integer 
Static strLastQuoteID As Integer 
Static strCount As Integer 
If strLocationID = strLastLocationID And strOriginalQuoteID = strLastQuoteID Then 
    strCount = strCount + 1 
Else 
    strLastLocationID = strLocationID 
    strLastQuoteID = strQuoteID 
    strCount = 0 

End If 
RenewCount = strCount 
End Function 

下面是數據

LocationID QuoteID OriginalQuoteID 
2   1094117  
2   1125718 1094117 
2   1148296 1125718 
2   1176466 1148296 
5   1031892 
5   1044976 1031892 
5   1059216 1044976 
5   1077463 1059216 

還有一些日期爲每個我可以操縱以及政策的一個小樣本。 我的想法是得到以下結果,並找到每個位置的最後一列的最大值。

LocationID QuoteID OriginalQuoteID Renewal_Count 
2   1125718 1094117  0 
2   1148296 1125718  1 
2   1176466 1148296  2 
5   1031892     0 
5   1044976 1031892  1 
5   1059216 1044976  2 
5   1077463 1059216  3 
5   1098124 1077463  4 
5   1100215     0 
5   1198714 1100215  1 
5   1254125 1198714  2 

任何幫助,將不勝感激。謝謝

我忘了提及這已經按位置ID排序,並且對於任何新策略,OriginalQuoteID都是空的。當我嘗試運行該函數時,我得到#num!在大多數行的列中。我想要的是給定的QuoteID連續續展的次數。所以對於以上位置ID 5 QuoteID 1254125已有2續展。

+0

你怎麼知道,如果續費是連續? – nicomp

+0

我忘了在策略的第一年提到OriginalQuoteID爲空。每年之後,如果它是續訂,OriginalQuoteID都有上一年的QuoteID。 – Harrison

+0

不太確定我下面的答案是否按預期工作 - 目前它的作用是「LocationID」。在你的評論中,你說第一年的*是空的*在你的帖子中說*可以爲空* - 這是什麼?第一年總是空的 - 這給出了明確的起點,或者可以是空的,這使得起點更加模糊。 –

回答

0

這可能工作(似乎與我的測試) - 創建一個笛卡爾產品本身,鏈接QuoteID OriginaQuoteID和計數。

SELECT T1.LocationID, 
     T1.QuoteID, 
     T1.OriginalQuoteID 
FROM Table1 T1, Table1 T2 
WHERE T1.QuoteID = T2.OriginalQuoteID 

,讓每LocationID(1加到計數空場)計:

SELECT  COUNT(*)+1 
FROM  Table1 T1, Table1 T2 
WHERE  T1.QuoteID = T2.OriginalQuoteID 
GROUP BY T1.LocationID 

或者如果你願意加入:

SELECT  COUNT(*)+1 
FROM  Table1 T1 INNER JOIN Table1 T2 ON T1.QuoteID = T2.OriginalQuoteID 
GROUP BY T1.LocationID