2017-08-17 24 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一個指數? –