Эффективность запроса - выберите 2 последние записи "группа / пакет" из таблицы

Мы протестировали довольно интересный SQL-запрос. К сожалению, оказалось, что этот запрос выполняется немного медленно - O(n2) - и мы ищем оптимизированное решение или, может быть, также совершенно другое?

Цель:

We would like to get for:
 - some customers ("record_customer_id"), e.g. ID 5
     - the latest 2 "record_init_proc_id" 
       - for every "record_inventory_id"

http://www.sqlfiddle.com/

Запрос работает нормально и показывает правильные результаты, но использует по крайней мере два полных сканирования таблицы, что, конечно, ужасно, если сканировать слишком много строк.

Можно ли (a) выбрать сначала все record_customer_id (s) в конкретном диапазоне дат, сохранив результаты этого запроса, а затем (b) выполнить рабочий запрос в скрипте SQL над этими сохраненными результатами?

Или, может быть, есть совершенно другой подход, который имеет отличную производительность?

Любая помощь очень ценится!

1 ответ

Я даю общее решение O(N) в моем блоге Groupwise-Max

Другие вопросы по тегам