У меня возникают проблемы с запросом базы данных Oracle и связанными подзапросами. В его основе проблема заключается в подсчете количества раз, когда идентификатор из одной таблицы встречается в другой таблице.Подсчет вхождений идентификатора в таблицу базы данных
Проблема: У меня есть две таблицы, таблица заказов, в которой хранится информация о заказанных элементах из веб-службы. Данные из этой таблицы запускаются через процесс (который я не контролирую), и результат помещается в выполненную таблицу.
Номера для заказа: не уникально для одного предмета. Каждый заказ может иметь большое количество предметов, и каждый элемент хранится на линии . Однако элементы могут быть комбо/пакетом, и это то, что обрабатывается процессом. Например, элемент GAME_PACK может войти в таблицу заказов, а на другом конце - GAME1, GAME2, GAME3 и связан с номером заказа.
Проблема заключается в том, иногда эти вещи не выходят из процесса правильно, а затем Line_Item не может быть связано с выполненной пункта. Единственный способ, с помощью доступных ресурсов, определить, есть ли проблема, - получить максимальное значение_имя и сравнить это с числом групп execute.item.
Что я пробовал: Сначала я думал, что это будет довольно просто сделать, просто используя rownumber()
или denserank()
аналитической функции над перегородкой по порядковому номеру, но он стал гораздо более запутанным, чем , Это в настоящее время запрос я работаю с:
select *
from(
select max (item_index) over (partition by tbl.item_number) item_count, tbl.*
from (
select i.item_fulfill_number, i.order_number, row_number()over(partition by i.item_number, i.order_number order by i.order_number) item_index
from fulfilled_items i) tbl
) results
inner join (
select *
from (
select orderinfo.order_number as order_order_number, orderinfo.line_number, orderinfo.ordered_item, row_number() over(partition by orderinfo.order_number order by orderinfo.line_number desc) order_row
from orderinfo
)
where order_row <= 1
)
on results.order_number = order_order_number
where results.item_count = results.item_index and ordered_item like 'GAME%'
отмечают, что сейчас я вытягивать, когда совпадают отсчеты, эта логика будет обращена вспять, когда я уверен, запрос работает
сдерживающих
- я не иметь доступ к процессу, который разделяет элементы
- запрос должен работать быстро, мы работаем с свыше 50000 возможных записей
- Запрос был протестирован на 22 секунд в течение 2 минут времени выполнения
- Pagination будет использоваться, если вы ответите, не беспокойтесь о включая, но это что-то рассмотреть, потому что это может сильно помочь или повредить скорость запроса
- Я не могу коснуться структуры таблицы
Структура таблицы и графики Представление (Максимальное количество линии представляют собой число fulfilled_item групп)
Спасибо, что нашли время, чтобы прочитать это.
EDIT Результаты должны выглядеть следующим образом:
где деталь приходит из таблицы заказов, и результат в порядке, BAD, основанный на соответствуют ли или не отработавшим группам максимального числа строк.
посмотреть, как будет выглядеть конечный результат, было бы полезно – JamieD77
@ JamieD77 Добавлен быстрый образец вывода. Я поставлю лучший в течение часа – Matt
что бы выполнил таблицу строк '123 | 444' представляют? что даст вам 4 группы с 3 номерами строк. – JamieD77