Plsql 分析事件发生的SQL时间序列
我试图为PL/SQL中的特定时间序列分析提供一个解决方案。我将使用一个非常简单的数据集来解释这个场景。 在COMP_TEST表中,只要事件开始日期和事件结束日期之间有单独的日历日(校准日期),事件就会为其创建一行。在事件编号1772349的情况下,我们得到2020年1月10日至2020年24月10日的行,因为这是开始和结束范围。 在每个给定的日历日,某些事件的结果在事件结果列中记录为“是”或“否” 检查要求:Plsql 分析事件发生的SQL时间序列,plsql,time-series,Plsql,Time Series,我试图为PL/SQL中的特定时间序列分析提供一个解决方案。我将使用一个非常简单的数据集来解释这个场景。 在COMP_TEST表中,只要事件开始日期和事件结束日期之间有单独的日历日(校准日期),事件就会为其创建一行。在事件编号1772349的情况下,我们得到2020年1月10日至2020年24月10日的行,因为这是开始和结束范围。 在每个给定的日历日,某些事件的结果在事件结果列中记录为“是”或“否” 检查要求: 每7个日历日应有一个“是”事件结果 两个“是”之间的间隔不应超过7个日历日 结果 将
- 每7个日历日应有一个“是”事件结果
- 两个“是”之间的间隔不应超过7个日历日 结果
- 将统计连续7个日历日的“否”结果块 作为不合规/缺陷的一个单位
- 每次遇到“是”结果时,计算的计数 “否”结果的未来7个日历日应重置回1
- 如果在校准日期遇到等于 事件结束日期,则该日期将被视为 不合规/缺陷也是如此
CREATE TABLE COMP_TEST (
event_id INT
,cal_date DATE
,event_result varchar2(5)
,event_start_date DATE
,event_end_date DATE
)
表格插入:
INSERT ALL
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/01/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/02/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/03/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/04/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/05/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/06/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/07/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/08/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/09/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/10/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/11/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/12/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/13/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/14/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/15/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/16/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/17/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/18/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/19/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/20/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/21/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/22/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/23/2020','MM/DD/YYYY'),'yes',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (1772349,TO_DATE('10/24/2020','MM/DD/YYYY'),'no',TO_DATE('10/01/2020','MM/DD/YYYY'),TO_DATE('10/24/2020','MM/DD/YYYY'))
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/15/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/16/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/17/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/18/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/19/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/20/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/21/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/22/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/23/2020','MM/DD/YYYY'),'yes',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/24/2020','MM/DD/YYYY'),'yes',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/25/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/26/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/27/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/28/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/29/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/30/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('10/31/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/01/2020','MM/DD/YYYY'),'yes',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/02/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/03/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/04/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/04/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/05/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/06/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/07/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/08/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/09/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/10/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/11/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/12/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/13/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/14/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
INTO COMP_TEST (event_id, cal_date, event_result, event_start_date, event_end_date) VALUES (5499345,TO_DATE('11/15/2020','MM/DD/YYYY'),'no',TO_DATE('10/15/2020','MM/DD/YYYY'),NULL)
SELECT * FROM DUAL
我尝试的查询:
WITH DAILY_RESULT AS (
SELECT
event_id
, cal_date
, CASE
WHEN event_result = 'yes' THEN 'compliant'
WHEN event_result = 'no' THEN 'deficient'
END AS status
FROM COMP_TEST
),
RANKINGS AS (
SELECT
event_id
, cal_date
, status AS status
, DENSE_RANK() OVER (PARTITION BY event_id ORDER BY cal_date) -
DENSE_RANK() OVER (PARTITION BY event_id, status ORDER BY cal_date)
AS sequence_grouping
FROM DAILY_RESULT
ORDER BY cal_date ASC
)
SELECT
event_id
, MIN(cal_date) AS start_date
, MAX(cal_date) AS end_date
, MAX(cal_date) - MIN(cal_date) AS duration
FROM RANKINGS
WHERE status = 'deficient'
GROUP BY
event_id
, sequence_grouping
HAVING MAX(cal_date) - MIN(cal_date) >=7
期望输出:
EVENT_ID - START_DATE - END_DATE
1772349 -- 10/10/2020 -- 10/16/2020
1772349 -- 10/24/2020 -- 10/24/2020
5499345 -- 10/15/2020 -- 10/21/2020
5499345 -- 10/25/2020 -- 10/31/2020
5499345 -- 11/02/2020 -- 11/08/2020
5499345 -- 11/09/2020 -- 11/15/2020
我想这是你想要的,但我没能弄清楚你在
上要求什么。此外,您的问题可能会使用一些格式,因为阅读和理解需求非常困难。感谢您提供创建表和DML语句
好的,PL/SQL解决方案,我认为更简单。你可以用一个循环来完成这项工作,但我认为,解释两个循环中发生的事情会让事情变得更清楚。如果你没有大量的数据,那么这可能无关紧要
我们先检查每个事件(外循环),然后检查该事件每天的数据(内循环)。我注意到您在2020年11月4日的事件id
5499345中放置了两行(不确定这是否是有意的),但内部循环上的分组方式处理:使用MAX()将首选'yes'
而不是'no'
。然后,我们只需在前进过程中计算连续的'no'
值,以提前范围的结束日期。遇到'yes'
值会重置计数器,点击7天会打印结果并重置。在给定的事件id
的数据集末尾,在内环之后,有一个计数器的最后一个测试,用于悬空'no'
值
DECLARE
v_cal_date_ct INTEGER;
v_start_date comp_test.cal_date%TYPE;
v_end_date comp_test.cal_date%TYPE;
BEGIN
FOR rec_event IN (SELECT DISTINCT ct.event_id
FROM comp_test ct
ORDER BY ct.event_id)
LOOP
v_cal_date_ct := 0;
FOR rec_date IN (SELECT ct.cal_date,
MAX(ct.event_result) AS event_result
FROM comp_test ct
WHERE ct.event_id = rec_event.event_id
GROUP BY ct.cal_date
ORDER BY ct.cal_date)
LOOP
IF v_cal_date_ct = 0 THEN
v_start_date := rec_date.cal_date;
v_end_date := rec_date.cal_date;
END IF;
IF rec_date.event_result = 'no' THEN
v_cal_date_ct := v_cal_date_ct + 1;
v_end_date := rec_date.cal_date;
ELSE
v_cal_date_ct := 0;
END IF;
IF v_cal_date_ct >= 7 THEN
dbms_output.put_line(rec_event.event_id || ' ' ||
to_char(v_start_date,
'mm/dd/yyyy') || ' ' ||
to_char(v_end_date,
'mm/dd/yyyy'));
v_cal_date_ct := 0;
END IF;
END LOOP;
IF v_cal_date_ct > 0 THEN
dbms_output.put_line(rec_event.event_id || ' ' ||
to_char(v_start_date,
'mm/dd/yyyy') || ' ' ||
to_char(v_end_date,
'mm/dd/yyyy'));
END IF;
END LOOP;
END;
/
结果:
1772349 10/10/2020 10/16/2020
1772349 10/24/2020 10/24/2020
5499345 10/15/2020 10/21/2020
5499345 10/25/2020 10/31/2020
5499345 11/02/2020 11/08/2020
5499345 11/09/2020 11/15/2020
最后,请记住在SQL*Plus中执行设置serveroutput ON
,以查看结果。如果您想为自己构建一个表来插入或将其转换为流水线函数,那么同样的逻辑也会起作用。我认为is做了您想要的事情,但我无法理解您在上的要求。此外,您的问题可能会使用一些格式,因为阅读和理解需求非常困难。感谢您提供创建表和DML语句
好的,PL/SQL解决方案,我认为更简单。你可以用一个循环来完成这项工作,但我认为,解释两个循环中发生的事情会让事情变得更清楚。如果你没有大量的数据,那么这可能无关紧要
我们先检查每个事件(外循环),然后检查该事件每天的数据(内循环)。我注意到您在2020年11月4日的事件id
5499345中放置了两行(不确定这是否是有意的),但内部循环上的分组方式处理:使用MAX()将首选'yes'
而不是'no'
。然后,我们只需在前进过程中计算连续的'no'
值,以提前范围的结束日期。遇到'yes'
值会重置计数器,点击7天会打印结果并重置。在给定的事件id
的数据集末尾,在内环之后,有一个计数器的最后一个测试,用于悬空'no'
值
DECLARE
v_cal_date_ct INTEGER;
v_start_date comp_test.cal_date%TYPE;
v_end_date comp_test.cal_date%TYPE;
BEGIN
FOR rec_event IN (SELECT DISTINCT ct.event_id
FROM comp_test ct
ORDER BY ct.event_id)
LOOP
v_cal_date_ct := 0;
FOR rec_date IN (SELECT ct.cal_date,
MAX(ct.event_result) AS event_result
FROM comp_test ct
WHERE ct.event_id = rec_event.event_id
GROUP BY ct.cal_date
ORDER BY ct.cal_date)
LOOP
IF v_cal_date_ct = 0 THEN
v_start_date := rec_date.cal_date;
v_end_date := rec_date.cal_date;
END IF;
IF rec_date.event_result = 'no' THEN
v_cal_date_ct := v_cal_date_ct + 1;
v_end_date := rec_date.cal_date;
ELSE
v_cal_date_ct := 0;
END IF;
IF v_cal_date_ct >= 7 THEN
dbms_output.put_line(rec_event.event_id || ' ' ||
to_char(v_start_date,
'mm/dd/yyyy') || ' ' ||
to_char(v_end_date,
'mm/dd/yyyy'));
v_cal_date_ct := 0;
END IF;
END LOOP;
IF v_cal_date_ct > 0 THEN
dbms_output.put_line(rec_event.event_id || ' ' ||
to_char(v_start_date,
'mm/dd/yyyy') || ' ' ||
to_char(v_end_date,
'mm/dd/yyyy'));
END IF;
END LOOP;
END;
/
结果:
1772349 10/10/2020 10/16/2020
1772349 10/24/2020 10/24/2020
5499345 10/15/2020 10/21/2020
5499345 10/25/2020 10/31/2020
5499345 11/02/2020 11/08/2020
5499345 11/09/2020 11/15/2020
最后,请记住在SQL*Plus中执行设置serveroutput ON
,以查看结果。如果您想自己构建一个表来插入或将其转换为流水线函数,那么同样的逻辑也会起作用。谢谢@kevin seymour。我会注意格式。缺陷是我稍后将使用它来按事件id汇总计数,这样对我来说添加起来就很简单了。我将在周末检查您的解决方案,然后再与您联系。再次感谢你!我为EVENT_ID 5499345(CAL_日期超过2020年11月1日)插入了一些额外的记录,并且该查询似乎只针对每个EVENT_ID获取两条记录。在某些情况下,一个事件ID可能有几个连续7天的周期需要识别。您能更新y吗