2017-07-18 64 views
0

我有一個視圖可以生成下圖中顯示的結果。我需要邏輯幫助。如何使用條件值和非缺失記錄列出記錄

要求:全體員工的 名單誰在各方在過去的兩年中取得了不低於100%目標。

B」在兩個不同的季度獲得90%。收到少於100%的員工不應被列出。
請注意,「A」不適用於Q2-2016。不應該列出沒有爲該季度工作的員工。
C」是唯一一個工作滿兩年,每季度收到100%的人。

編輯:添加的圖像鏈接顯示員工姓名,季度,年份和分數。 https://i.imgur.com/FIXR0YF.png

回答

0

邏輯非常簡單,它與宿舍的數學有點痛苦。

過去兩年有8個季度,所以您只需在過去兩年中選擇所有員工姓名,目標> = 100%,按員工姓名分組,並應用HAVING子句來限制輸出給count(*) = 8的員工。從當年

cast(extract('year' from current_date) as integer) as yr, 
(cast(extract('month' from current_date) as integer)-1)/3 + 1 as quarter; 

減去2,找到以前的年和季度:

爲了得到當前年份和季度,您可以使用這些表達式。如果將這些表達式放入子查詢中,代碼將會更清晰,因爲您將需要多次用於四分之一算術。要執行季度算術,您必須從您存儲的文本值中提取季度的整數值。

總之,解決方案應該是這個樣子:

select 
    employee 
from 
    (select employee, cast(right(quarter,1) as integer) as qtr, year 
     from your_table 
     where target >= 100 
     ) as tgt 
    cross join (
     select 
      cast(extract('year' from current_date) as integer) as yr, 
      (cast(extract('month' from current_date) as integer)-1)/3 + 1 as quarter 
     ) as qtr 
where 
    tgt.year between qtr.yr-1 and qtr.yr 
    or (tgt.year = qtr.yr - 2 and tgt.qtr > qtr.quarter) 
group by 
    employee 
having 
    count(*) = 8; 

這是未經測試。

如果你碰巧使用的Postgres的,並期望是做了很多季的算術你可能要定義自定義數據類型爲A Year and Quarter Data Type for PostgreSQL

描述