2014-10-30 6 views
2

Я пытаюсь определить, какая «итерация» любой данной записи, подсчитывая количество предшествующих ей записей и иметь определенные совпадающие характеристики. По сути, я хотел бы узнать количество записей с одной и той же родительской записью &, которая также имеет идентификатор # меньше, чем [идентификатор моей записи #]. Я могу получить коррелированный подзапрос, чтобы подсчитать количество записей с одним и тем же родителем и категорией, но когда я пытаюсь добавить фильтр идентификаторов, мой фильтр подзапроса не может найти столбец «T1.ID» - поле ID # из моего основной стол.Коррелированные подзапросы - подсчет записей «меньше» основной записи запроса

My SQL следует, звёздочка, где я пытался и не смог ограничить результаты, основанные на «T1 в» Индентификационном (я, очевидно, исключить звездочки в моей фактической 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 

I других программы, Я использовал функции, которые строят подзапрос, чтобы выполнить аналогичный результат, поэтому, если я буду искать в этом направлении, я бы оценил эту обратную связь.

Я считаю из той же таблицы, поэтому выборка данных:

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

Было бы полезно, если вы разместите некоторые данные образца и желаемый результат. –

ответ

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