ロジックは非常に簡単ですが、それは四分の一の数学であり、少しの痛みです。
過去2年間に8つの四半期があるため、過去2年間のすべての従業員名をターゲット> = 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
で説明したようにカスタムデータ型を定義することもできます