首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询层次查询

查询层次查询
EN

Stack Overflow用户
提问于 2019-03-18 20:20:11
回答 1查看 57关注 0票数 2

我想分析一下我的数据集,以找出数据的差异。

我的样本日期集:

代码语言:javascript
运行
复制
id  status       stdate         enddate
1   new          01-JUL-17  31-JUL-17
1   process      01-OCT-17  31-DEC-18
1   new          01-JAN-19  31-JAN-19--- issue
2   new          01-SEP-14  31-JAN-15
2   process      01-JUN-16  30-NOV-17
2   complete     01-DEC-17  31-DEC-18
....
....

我想知道其中有多少ID的结果状态比当前的要早。状态序列的顺序应该是新的-进程完成的。因此,我希望报告所有ID,其中最近的状态已反转为较早的状态。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 20:28:24

您可以使用LAG()函数查找违规行,如下所示:

代码语言:javascript
运行
复制
with x (id, status, stdate, enddate, 
        prev_id, prev_status, prev_stdate, prev_enddate) as (
  select
    id, 
    status,
    stdate,
    enddate,
    lag(id) over(partition by id order by stdate),
    lag(status) over(partition by id order by stdate),
    lag(stdate) over(partition by id order by stdate),
    lag(enddate) over(partition by id order by stdate)
  from my_table
)
select * from x
where status = 'new' and prev_status in ('process', 'complete')
   or status = 'process' and prev_status = 'complete'

注意事项:我假设您只需要在同一ID的行之间进行比较。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55229458

复制
相关文章

相似问题

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