如何使用SQL将记录一直追溯到原始记录



我们是一个名为ticketing的表,用于跟踪所有服务票证。一张票据可以导致另一张票据,该票据导致下方的replaced_by_ticket_id字段指示的另一票据

| ticket_id | is_current | replaced_by_ticket_id |
|-----------|------------|-----------------------|
| 134       | 0          | 240                   |
| 240       | 0          | 321                   |
| 321       | 1          | Null                  |
| 34        | 0          | 93                    |
| 25        | 0          | 16                    |
| 16        | 0          | 25                    |
| 93        | 1          | Null                  |

我该如何写一个查询来获得导致当前票(321&93(的票的数量?我的意思是,我可以自己加入桌子,但无法知道加入多少次。另外,不同的门票有不同的级别。

以下是查询的预期结果

| ticket_id | total_tickets |
|-----------|---------------|
| 321       | 3             |
| 93        | 4             |

最好的方法是什么?

您可以使用递归查询;诀窍是跟踪原始的";当前";ticket,因此您可以在外部查询中按此进行聚合。

因此:

with cte as (
select ticket_id, ticket_id as parent_id from ticketing where is_current = 1
union all
select c.ticket_id, t.ticket_id
from ticket t
inner join cte c on c.parent_id = t.replaced_by_ticket_id
)
select ticket_id, count(*) total_tickets
from cte
group by ticket_id

相关内容

  • 没有找到相关文章

最新更新