如何使用条件值和非缺失记录列出记录
问题描述:
我有一个视图可以生成下图中显示的结果。我需要逻辑帮助。如何使用条件值和非缺失记录列出记录
要求:全体员工的 名单谁在各方在过去的两年中取得了不低于100%目标。
“B”在两个不同的季度获得90%。收到少于100%的员工不应被列出。
请注意,“A”不适用于Q2-2016。不应该列出没有为该季度工作的员工。
“C”是唯一一个工作满两年,每季度收到100%的人。
编辑:添加的图像链接显示员工姓名,季度,年份和分数。 https://i.imgur.com/FIXR0YF.png
答
逻辑非常简单,它与宿舍的数学有点痛苦。
过去两年有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
描述