【问题标题】:Correlated Subqueries - Counting records "less than" the main query record相关子查询 - 计数“少于”主查询记录的记录
【发布时间】:2014-10-30 01:24:23
【问题描述】:

我试图通过计算之前的记录数并具有某些匹配特征来确定任何给定记录是哪个“迭代”。本质上,我想知道具有相同父记录和类别且 ID# 小于 [我的记录的 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)

【问题讨论】:

  • 如果您发布一些示例数据和所需的结果会很有帮助。

标签: mysql sql correlated-subquery


【解决方案1】:

我想这就是你想要的:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2014-06-10
    • 2012-01-14
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多