0
我正在尝试浏览表并检索缺勤频率指示符。我已经有了一个查询,可以按月计算缺席的次数。问题是,我需要比较当前记录与其他人(在同一个表'测试')来检查一个条件,这将有助于我的频率计算。 我考虑新频率的规则是:当两个疾病周期不连续,并且他们之间有4天的差距。PL/SQL检查选择语句中的条件计数内是否存在记录
所以,我尝试代码,使用条件计数()如下:
WITH test (id, start_abs, end_abs, tmp) AS
(SELECT id, start_abs, end_abs, 0 AS tmp
FROM emp_absences
UNION ALL
SELECT id, start_abs + 1, end_abs, tmp + 1
FROM test
WHERE end_abs - start_abs > 0)
SELECT id, TO_CHAR(start_abs, 'yyyy-mm') AS abs_month,
COUNT(DISTINCT start_abs) AS nbr_abs_month,
COUNT(CASE WHEN NOT EXISTS (SELECT *
FROM test b
WHERE a.id = b.id AND a.start_abs - 4 = b.start_abs)
THEN debut_horaire ELSE NULL
END) AS frequency
FROM test a
GROUP BY 1, 2))
我想知道是否有可能通过这种方式这样做呢? 非常感谢。
Oracle版本:12.1.0.2.0
你需要解释你的答案,而不仅仅是一堆后的代码 – Jonathan
它似乎工作,但对我来说,它需要很长的时间显示效果 – mistafl0
你有没有在表列start_abs一个指数? –