我有一个SQL语句,它查询一个项目是否存在于一年之内:
SELECT
t.item_type_code,
t.item_id
FROM
ITEM_TABLE t
WHERE
extract(year from t.issue_date) =< 2022 AND
extract(year from t.termination_date) => 2022
我现在想看看在这些项目上发生的一些事件。我想计数的事件发生在该项目的每一年,它存在。
换句话说:
1.查询给定年份中存在的项目
1.获取给定年份中这些项目上发生的事件计数。
以下查询将返回该信息:
WITH items AS
(
SELECT
t.item_type,
t.item_id
FROM
ITEM_TABLE t
WHERE
extract(year from t.issue_date) <= 2022 AND
extract(year from t.termination_date) => 2022
)
SELECT
t.item_type,
COUNT(event_id)
FROM
items t
INNER JOIN
events_xref x ON t.item_id = x.item_id
INNER JOIN
events ON x.event_id = e.event_id
WHERE
extract(year from e.effective_date) = 2022
GROUP BY
t.item_type
我想做的不是硬编码这些年。我想每年查询并返回相同的信息。有人能建议如何做到这一点吗?
编辑
我被要求澄清更多。所以,假设你的工作是颁发驾驶执照。每个许可证都有一个生命周期,从发布到到期。此外,许可证可以随着时间的推移记录许多事件。例如,发行是一个事件。超速罚单(或任何其他违规行为)是一个事件。许可证到期是一个事件,等等。item
表包含有关许可证的信息。ID、签发日期和失效日期event
表存储每个许可证上发生的事件,包括event_id
、事件类型和事件日期。events_xref
表仅用作连接上述2个表的交叉引用表,并且仅包含item_id
和event_id
。
我被要求提供的是:
1.首先,收集给定年份中存在的所有许可证的列表(即,如果其发行日期在该年内或之前,且其到期日期在该年内或之后)
1.获取该列表并计算该列表中在同一给定年份发生的所有事件
1.我需要报告过去75年左右的情况,所以我每年都需要这样做。
我提供的查询确实满足了我的需要,但我必须重新设置它,并更改您每次在查询中看到的3个位置的年份,以获取最近75年的数据。我希望能让调查组来处理这个问题
1条答案
按热度按时间i2loujxw1#
看起来你想使用一个行生成器来生成年份,然后
GROUP BY
生成年份以及item_type
: