我有一個名爲'group_quartile'的字段,它使用sql ntile()函數根據他們的活動分數計算每個客戶所處的哪個四分位數。然而,使用這個ntile(0函數,我發現有些客戶的活動分數相同,但分數不同,我需要修改'group-quarterile'列以使所有具有相同活動分數的客戶位於同一個group_quartile中。如何遍歷一個表並在一個字段中查找具有相同值的相鄰行,並在SQL中有條件地更新另一列?
表中的值的視圖:
Customer_id Product Activity_Score Group_Quartile
CH002 T 2328 1
CR001 T 268 1
CN001 T 178 1
MS006 T 45 2
ST001 T 21 2
CH001 T 0 2
CX001 T 0 3
KH001 T 0 3
MH002 T 0 4
SJ003 T 0 4
CN001 S 439 1
AC002 S 177 1
SC001 S 91 2
PV001 S 69 3
TS001 S 0 4
我用CTE表達,但它因此未工作 我的查詢只更新(從上面的例子):
CX001 T 0 3
修飾以
CX001 T 0 2
所以只有第一個重複的活動成績進行檢查和2 我需要更新所有下面的行以及該行的group_quartile被更新。
CX001 T 0 3
KH001 T 0 3
MH002 T 0 4
SJ003 T 0 4
我不能使用DENSE_RANK(),而不是四分位數來分離記錄在大約4 quartiels安排每個產品的客戶是一個企業的要求。 從我的理解我需要遍歷表 -
- 查找具有相同的行爲得分和相同的產品,其前身卻有着不同的group_quartile
- 更新選定行的group_quartile其前任的四分一排值
- 然後通過已更新的表格查找具有上述條件的任何行,並以相似方式更新該行。
- 循環繼續,直到具有相同活動分數(對於同一產品)的所有行放入同一個group_quartile中。
-
這是表結構我的工作:
CREATE TABLE #custs
(
CUSTOMER_ID NVARCHAR(50),
PRODUCT NVARCHAR(50),
ACTIVITYSCORE INT,
GROUP_QUARTILE INT,
RANKED int,
ROWNUM INT
)
INSERT INTO #custs
- 添加一列給行號(唯一ID)爲每行
SELECT CUSTOMER_ID,產品,ACTIVITYSCORE,GROUP_QUARTILE,排名,
ROW_NUMBER()OVER (分區由產物ORDER BY activityscore降序)N
FROM
- 基於 '分割' 列值的父表衍生自行
(SELECT CUSTOMER_ID,PRODUCT,aCTIVITYSCORE,
DENSE_RANK()OVER(PARTITION BY PRODUCT ORDER BY ACTIVITYSCORE DESC)AS排名,
NTILE(4)OVER(PARTITION BY PRODUCT ORDER BY ACTIVITYSCORE DESC)AS GROUP_QUARTILE
FROM #parent_score_table WHERE(分割= '大')
)作爲臨時
ORDER BY PRODUCT
我用來實現這一部分是如下的方法:
- 查詢發現其具有活性得分相同,其上一行行,但有一個
不同的GRoup_Quartiel值。
- 我需要使用查詢來更新這一行。
- 接下來,在這個新更新的表中找到任何行,其活動分數與前一行的
相同,但具有不同的group_quartile值。
- 繼續更新上述方式TABEL直到與相同的行爲得分
所有行已經更新,以具有相同的四分位值
我設法找到唯一具有活性的行得分相同,其先前但具有不同的Group_Quartill值,但無法循環查找可能與此更新行匹配的新行。
選擇t1.customer_id,t1.ACTIVITYSCORE,t1.PRODUCT,t1.RANKED,t1.GROUP_QUARTILE,
t2.GROUP_QUARTILE如modified_quartile
從#custs T1,T2 #custs
其中(
T1。 ROWNUM = t2.rownum + 1
和t1.ACTIVITYSCORE = t2.ACTIVITYSCORE
和t1.PRODUCT = t2.PRODUCT
而不是(t1.GROUP_QUARTILE = T2。GROUP_QUARTILE))
任何人都可以幫助什麼應該是上述t-sql語句? 乾杯!
這是什麼RDBMS? SQL Server? – JNK 2013-03-04 16:47:35
也請發佈您的失敗嘗試一些實際的代碼。 – JNK 2013-03-04 16:50:58
SQL Server數據庫。 – Shiny 2013-03-04 16:53:00