![]() |
|
Пронумеровать в запросе строки с учетом периода | ☑ | ||
---|---|---|---|---|
0
Homer
31.10.16
✎
13:39
|
Есть запрос. В нем необходимо пронумеровать строки во временной таблица для последующего поиска максимума номера. Пользуюсь стандартным методом: связь двух таблиц по условию ИсходнаяТаблица.Ссылка > ИсходнаяТаблица1.Ссылка. Все прекрасно отрабатывает при малом количестве строк в ИсходнаяТаблица. Проблема в том, что таблицы большого объема (>10 000 строк) начинает тормозить. Есть способ нумерации строк с учетом того, что в будущих виртуальных таблицах необходимо будет искать максимум номера строки.
|
|||
1
Ildarovich
31.10.16
✎
14:01
|
Вообще всегда интересно знать фактуру задачи (скрывая эту информацию, вы лишаете многих интереса к решению, поскольку неясно, насколько задача актуальна и правильно ли она сформулирована). Ответьте хотя бы на это:
- Что за данные в временной таблице? - Есть ли другие поля для упорядочивания, кроме ссылки? - Нужно ли вообще нумеровать строки, если максимальный номер можно определить, сначала найдя максимальную ссылку, а затем посчитав число ссылок меньше нее? |
|||
2
Homer
31.10.16
✎
14:07
|
(1) Задача почитать какие поступления закрыт планом при условии план связан с поступлением только договором. Вычисляется только запросом.
Легче стало? |
|||
3
Ildarovich
31.10.16
✎
17:13
|
(2) Конечно, стало. Намного, намного легче и понятней. То есть вы решаете задачу "ФИФО запросом". На самом деле я знаю как решить эту задачу для 10 000 строк (и больше) без существенного торможения. Нумерация - это ведь частный случай нарастающего итога, который по сути - интеграл.
По стечению обстоятельств, как раз сейчас заканчиваю публикацию с готовым запросом на эту тему. Наброски можете посмотреть вот тут: http://catalog.mista.ru/public/201526/ и вот тут http://catalog.mista.ru/public/262300/. Обязательно опубликую в этой теме ссылку на статью, когда она будет готова. |
|||
4
polosov
31.10.16
✎
17:45
|
(3) Очень полезные статьи. Спасибо.
|
|||
5
Homer
01.11.16
✎
09:25
|
(3)
http://catalog.mista.ru/public/262300/ Данный метод смотрел 2 года назад. Как то геморно показалось)) Из http://catalog.mista.ru/public/201526/ "Для таких особенных задач и предназначен описываемый далее метод. Он не опирается ни на какие технологические ухищрения, а является чисто алгоритмическим. Метод требует, чтобы строки исходной таблицы были пронумерованы. " И в чем преимущество твоего алгоритма?? Пронумеровать я могу также внешне, я интересуюсь именно быстрой нумерацией в запросе!! В моем отчете нумерация занимает 90% времени при количестве строк > 25 тыс. В цифрах: 200 сек отчет 180 сек нумерация 19 сек таб с нарастающим и 1 сек вычисление |
|||
6
Ildarovich
01.11.16
✎
12:25
|
Преимущества в том, что при НУМЕРАЦИИ В ЗАПРОСЕ нет квадратичной зависимости от числа строк.
...геморно показалось... - а более простых методов нет даже в теории. В SQL для этого оконные функции придумали. Поскольку в 1С их нет, приходится идти на достаточно серьезные усложнения. Мне нравятся такие цифры: они говорят о том, что метод, который я разрабатываю, нужен. А есть ли какая-либо возможность протестировать мой подход на ваших данных? Я бы переписал запрос на ваш случай, если дадите свой исходный запрос (можно в почту). |
|||
7
sapphire
01.11.16
✎
13:07
|
(0) В нем необходимо пронумеровать строки во временной таблица для последующего поиска максимума номера.
Интересно, чем же максимум будет отличаться от количества записей? |
|||
8
Homer
01.11.16
✎
13:16
|
(6) Запрос коммерческая тайна))
Я же написал, что могу вынести нумерацию из запроса. просто не удобно для отладки. В вашем механизме все равно надо сначала обработать какую-то таблицу и только потом ее выгрузить, пронумеровать и передать вашему математическому алгоритму. В моем методе аналогичная последовательность, только все в одном запросе. Или я не вижу в каком месте вы нумеруете таб? (7) Данный акцент был сделал для того что бы не писали про момент времени. |
|||
9
sapphire
01.11.16
✎
13:18
|
(8) Вам нужен максимальный номер?
Чем он будет отличаться от количества строк? |
|||
10
Homer
01.11.16
✎
13:24
|
(9) мне необходимо воспользоваться функцией Минимум. Прошу прощения кого ввел заблуждение про Максимум.
МИНИМУМ(мТабПредварительная.Номер) КАК Номер ПОМЕСТИТЬ мТабЧастичноОплаченнаяФакт |
|||
11
Ildarovich
01.11.16
✎
14:54
|
(8) Ну тайна так тайна.
Тогда подождите статью - возьмете запрос оттуда. Там действительно решается эта или очень похожая проблема. Но довольно сложным способом. Для этого метод "баттерфляй", приведенный по ссылке, был улучшен. Теперь нумерации не требуется. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |