2014-10-30 216 views
2

我試圖確定哪個「迭代」的任何給定記錄是通過計算它之前的記錄數並具有某些匹配特性。本質上,我想知道具有相同父記錄&類別的記錄數也低於[我的記錄ID#]。我可以得到一個相關的子查詢來計算具有相同父類和類別的記錄數,但是當我嘗試添加一個ID過濾器時,我的子查詢過濾器找不到列「T1.ID」 - 來自我的ID#字段主表。相關子查詢 - 計數記錄「小於」主查詢記錄

我的SQL如下,星號是在那裏我已經嘗試和失敗基於「T1的」記錄ID限結果(我顯然不包括在我的實際SQL星號)

select T1.ID, T2.ITERATION 
from TICKET as T1 
inner join 
(select COUNT(T3.ID) as ITERATION, T3.CATEGORY_ID, T3.PARENT_ID 
from TICKET as T3 
where T3.IS_PARENT = 0 **AND T3.ID < T1.ID** 
group by T3.PARENT_ID, T3. CATEGORY_ID) 
as T2 on (T1.PARENT_ID = T2.PARENT_ID AND 
T1. CATEGORY_ID = T2.CATEGORY_ID) 
where T1.IS_PARENT = 0 

我等節目,我使用了構建子查詢的函數來實現類似的結果,所以如果我應該朝這個方向看,我會很感激這種反饋。

我來自同一個表計數,因此樣本數據:

ID PARENT_ID CATEGORY 
10 1   A 
11 2   A 
12 1   B 
13 3   A 
14 2   A 
15 1   A 
16 3   B 
17 1   A 

和期望的輸出:

ID ITERATION (explanation) 
10 0   (No preceding ID with same parent & category) 
11 0   (No preceding ID with same parent & category) 
12 0   (No preceding ID with same parent & category) 
13 0   (No preceding ID with same parent & category) 
14 1   (ID 11 precedes 14 and shares parent & category) 
15 1   (ID 10 precedes 15 and shares parent & category) 
16 0   (No preceding ID with same parent & category) 
17 2   (ID's 10, 15 precede 17 and share parent & category) 
+0

如果您發佈一些樣本數據和期望的結果將會很有幫助。 – 2014-10-30 01:34:05

回答

0

我想這是你想要什麼:

SELECT 
    ID, 
    PARENT_ID, 
    CATEGORY, 
    (SELECT COUNT(*) FROM TICKET 
    WHERE ID < T.ID 
      AND CATEGORY = T.CATEGORY 
      AND PARENT_ID = T.PARENT_ID 
    ) AS ITERATION 
FROM TICKET T 
ORDER BY ID 

使用您的樣本數據的結果:

ID PARENT_ID CATEGORY ITERATION 
10 1   A   0 
11 2   A   0 
12 1   B   0 
13 3   A   0 
14 2   A   1 
15 1   A   1 
16 3   B   0 
17 1   A   2