首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为第一条记录后发生的任何变更值获取emp id

如何为第一条记录后发生的任何变更值获取emp id
EN

Stack Overflow用户
提问于 2021-11-08 19:22:11
回答 2查看 45关注 0票数 0

我有emp表,它包含许多列,并且一个员工可以在

更改了他/她的记录。它没有主键,因为emp id可以

在员工值旁边重复。

有一个专栏"health",它描述了健康和with values(heart,skin,null) etc..

对于健康列中的值的每次改变,假设1号雇员有心脏问题,因为在健康列中登记了第一个记录,然后该雇员恢复健康,然后添加第二行和列health=null,

有时,员工会患上另一种疾病“皮肤”。

如果他/她的列(Health),如何获取员工编号

如果值变为null或其他值,是否已更改为任何健康值?

有什么需要帮忙的吗?

代码语言:javascript
运行
复制
select empid, health_status from
(
    select e.emp_id empid, e.health health_status,
           count(e.health) over (partition by e.emp_id order by e.modification_date asc) sick_count
    from emp e
)
where sick_count > 1
EN

回答 2

Stack Overflow用户

发布于 2021-11-08 19:32:57

看起来你需要计算NULLs和NOT-NULLs的个数。NVL2()函数很适合用来计算这个值,比如

代码语言:javascript
运行
复制
SELECT e.emp_id, e.health,
       SUM(NVL2(health,1,0)) OVER (PARTITION BY e.emp_id) AS "Sick",
       SUM(NVL2(health,0,1)) OVER (PARTITION BY e.emp_id) AS "Got well"       
  FROM emp e

如果运行状况为NOT-NULL,则返回第二个参数,否则返回第三个参数。顺便说一句,使用ORDER BY子句将是多余的。

票数 2
EN

Stack Overflow用户

发布于 2021-11-08 21:33:33

在Oracle12中,您可以使用MATCH_RECOGNIZE查找生病、康复、然后再次生病的员工:

代码语言:javascript
运行
复制
SELECT emp_id
FROM   emp
MATCH_RECOGNIZE (
  PARTITION BY emp_id
  ORDER     BY modification_date
  PATTERN (sick well+ sick)
  DEFINE
    sick AS health IS NOT NULL
    well AS health IS NULL
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69888846

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档