我有以下情况:
更多细节:我想要一个查询,返回工作到第6个月的员工的ID(所以请按以下方式阅读列月:第1个月,第2个月等),但不是那些没有做过的人第六个月后工作。 在我的案例中,员工身份3 - ana在第5个月工作,也在8个月工作。所以我想排除她。我怎么做?我尝试使用内连接和分组依据,但缺少第二个条件。
答案 0 :(得分:0)
我认为您需要某种聚合查询,因为您需要检查每个工作人员的所有记录的工作模式。一个选项是GROUP BY
id
,然后检查是否发生了大于6的月份。如果您希望将完整记录视为预期输出,则加入包含此逻辑的子查询以过滤掉不匹配的记录。
SELECT
wm1.id,
wm1.month
FROM worked_months wm1
INNER JOIN
(
SELECT
id
FROM worked_months
GROUP BY id
HAVING SUM(CASE WHEN month > 6 THEN 1 ELSE 0 END) = 0
) wm2
ON wm1.id = wm2.id
答案 1 :(得分:0)
最有效的方法是使用反连接。对您的实际数据运行各种解决方案,看看哪种解决方案效果最佳。
select id, month
from worked_months
where id not in ( select id
from worked_monhts
where month > 6
)
;
答案 2 :(得分:0)
首先在子查询中我发现员工ID在第6个月之后有效,然后从结果集中排除这些员工:
子查询:
select id worked_month w
where month > 6
答案:
select id, name from employee
where id not in
(
select id worked_month w
where month > 6
)