仅从'added'/'removed'列中查找活动项目



我正在尝试编写一个查询,试图找到最近的项目。

给定一组parent_service_items,找到相关的子服务项并返回它们的列表。为了查找直接子节点,我使用query来查找所有关联的子节点。然后,我在一个递归postgres函数中使用这个查询,直到没有子节点留下为止。

我的目标是更新它来处理最后一项被删除的情况。以这个例子为例。

epic 1 
ticket 1
links (added, removed)
ticket 2
links (added)
epic 2
ticket 1
links (added)
ticket 2
links (added)

如果给定史诗1作为父id,则只返回ticket 2。如果给定史诗1和史诗2作为父id,则应该返回ticket 1和ticket 2。上面的查询目前为史诗1提供了票证1和票证2。

正如您可以想象的那样,使用jira,这些示例将变得复杂得多。关于如何最好地过滤这一点,以便我们只包括一个票,如果最近的行动被添加任何想法。这个表包括一个action_key,它是一个'added'或' deleted '字符串,和一个时间戳。

谢谢。样本数据:

service_items

item_type史诗史诗

如果删除了一行不能再添加,以下是实现这一目标的方法:

SELECT DISTINCT
t.child_service_item, action_date
FROM
service_item_links t
WHERE
t.parent_service_item IN (1, 2)
AND NOT EXISTS
(
SELECT
1
FROM
service_item_links t2
WHERE
t2.parent_service_item = t.parent_service_item
AND t2.child_service_item = t.child_service_item
AND t.action_key = 'removed'
);

如果行可以稍后再添加,则需要找出该行的最后action_type:

;WITH cte AS (
SELECT *, FIRST_VALUE(action_key) OVER (PARTITION BY parent_service_item, child_service_item ORDER BY action_date DESC) last_action_type
FROM service_item_links
)
SELECT parent_service_item, child_service_item, MAX(action_date) AS action_date
FROM cte 
WHERE last_action_type ='added'
AND parent_service_item IN (1, 2)
GROUP BY cte.parent_service_item, child_service_item

最新更新