2017-08-17 26 views
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)) 

我想知道是否有可能通过这种方式这样做呢? 非常感谢。

回答

0

为我工作

select Au.Username 
     ,Au.User_Id 
     ,count(case 
       when exists (select 1 from All_Users Au_Aux where Au.User_Id = Au_Aux.User_Id) then 
       Au.Created 
       else 
       null 
      end) as count 
    from All_Users Au 
group by Au.Username 
     ,Au.User_Id 

我希望能帮到你。 感谢

+0

你需要解释你的答案,而不仅仅是一堆后的代码 – Jonathan

+0

它似乎工作,但对我来说,它需要很长的时间显示效果 – mistafl0

+0

你有没有在表列start_abs一个指数? –