首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL -根据第1行+第2行的比较对记录进行分组和筛选

Oracle SQL -根据第1行+第2行的比较对记录进行分组和筛选
EN

Stack Overflow用户
提问于 2018-11-28 11:23:40
回答 1查看 38关注 0票数 1

我有一个数据库,其中包含被监视的制造机器上的数据,其中包含以下字段(以及更多):

代码语言:javascript
复制
ID | WORK_ORDER_ID | WORK_CENTER_ID | MFGNO | ...

记录是实时数据,并根据work_order_id更改时顺序输入。我想检查工作订单之间是否MFGNO是相同的,但基于work_center_id分组。

例如:

代码语言:javascript
复制
1. 998 | 100 | 205 | TEST_MFG
2. 997 | 100 | 205 | TEST_ MFG

这将返回true (或1行),因为mfgno是相同的。

目前,我可以为每个work_center_id单独这样做:

代码语言:javascript
复制
SELECT * FROM
(
  select * FROM (select ID, WORKORDER_ID, TIMESTAMP, MFGNO from 
  HIST_ILLUM_RT where WORK_CENTER_ID = 5237
  ORDER BY ID desc) where rownum = 1
)
where MFGNO = ( 
    SELECT mfgno FROM
     (
     select * FROM (select ID, WORKORDER_ID, TIMESTAMP, MFGNO from 
     HIST_ILLUM_RT where WORK_CENTER_ID = 5237 
      ORDER BY ID desc
     ) where rownum < 3 order by id asc
    ) where rownum = 1
)

如果没有电流背靠背MFGNO,则生成0行,如果有,则生成1>。

这样,我必须为每个单独的work_center_id编写这个表达式(大约有40个)。我希望有一个表达式,该表达式检查每个分组work_center_id的前两行,并仅在MFGNO匹配的情况下返回一行。

例如:

代码语言:javascript
复制
1. 998 | 101 | 205 | TEST_MFG
2. 997 | 098 | 206 | SomethingElse
3. 996 | 424 | 205 | TEST_MFG
4. 995 | 521 | 206 | NotAMatch
5. 994 | 123 | 205 | Doesn'tCompareThis
6. 993 | 664 | 195 | Irrelevant

为此,它只返回1,因为只有work_center_id = 205有一个背靠背(第1行和第2行) MFGNO,而206个没有。

我正在运行Oracle 11g,这似乎限制了我,但我无法升级或找到在当前版本中创建此表达式的工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 11:32:27

我认为你想要lag()和一些逻辑:

代码语言:javascript
复制
select count(*)
from (select t.*,
             lag(MFGNO) over (partition by WORK_CENTER_ID order by id) as prev_mfgno
      from t
     ) t
where prev_mfgno = mfgno
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53518333

复制
相关文章

相似问题

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