Oracle SQL查询获取记录的最大值,不包括具有两个范围中的值的记录(小于最大值且大于最大值)

时间:2017-09-01 14:58:14

标签: sql oracle

我有以下情况:

enter image description here

更多细节:我想要一个查询,返回工作到第6个月的员工的ID(所以请按以下方式阅读列月:第1个月,第2个月等),但不是那些没有做过的人第六个月后工作。 在我的案例中,员工身份3 - ana在第5个月工作,也在8个月工作。所以我想排除她。我怎么做?我尝试使用内连接和分组依据,但缺少第二个条件。

3 个答案:

答案 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
)