2014-10-30 271 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