我有一个数据库,其中包含被监视的制造机器上的数据,其中包含以下字段(以及更多):
ID | WORK_ORDER_ID | WORK_CENTER_ID | MFGNO | ...记录是实时数据,并根据work_order_id更改时顺序输入。我想检查工作订单之间是否MFGNO是相同的,但基于work_center_id分组。
例如:
1. 998 | 100 | 205 | TEST_MFG
2. 997 | 100 | 205 | TEST_ MFG这将返回true (或1行),因为mfgno是相同的。
目前,我可以为每个work_center_id单独这样做:
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匹配的情况下返回一行。
例如:
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,这似乎限制了我,但我无法升级或找到在当前版本中创建此表达式的工作。
发布于 2018-11-28 11:32:27
我认为你想要lag()和一些逻辑:
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 = mfgnohttps://stackoverflow.com/questions/53518333
复制相似问题