У меня есть база данных, которая содержит данные об отслеживаемых производственных машинах, в которых эти поля находятся (и более):
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
)
Это создает либо 0 строк, если нет текущих спина к спине MFGNO, то 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, который, как мне кажется, ограничивает меня, но яЯ не могу обновить или найти способ создания этого выражения в текущей версии.