|
Получение среза последних на дату установки среза первых | ☑ | ||
---|---|---|---|---|
0
ptitc0
22.03.21
✎
13:56
|
Есть задача сделать выборку из регистра сведений, последних значений на день, когда впервые были установлены значения регистра по данному измерению. При этом условие, что полученное значение входит в список требуемых значений.
Например, по заказу1 впервые была запись в регистр сведений первого марта и записано значение Х, но в течение дня его несколько раз сменили и на конец дня первого марта это было значение Y, которое входит в список значений А по заказу2 впервые была запись в регистр второго марта значения Y, но к концу дня его сменили на Z, которое нас не интересует. На следующий день эти значения снова сменят и они даже поменяются местами, но нас это уже не должно интересовать, нас интересовал лишь первый день установки значения, при чем есть нюанс: этот первый день нам все равно когда был, т.е. отбор не по периоду, а по конечному значению. Я что-то вообще потерялся уже. Запрос по первым значениям - это элементарно, а вот как выцепить последние значения того дня да еще и чтобы условием отбора именно эти значения были... Хотя бы пините меня в нужном направлении. PS Конфа самопальная поэтому название регистра приводить нет смылса. |
|||
1
dka80
22.03.21
✎
14:06
|
Динамически сформируй текст запроса объединив срезпоследних для каждого заказа. Либо, если периодичность секунда, то выбираешь срез первых, потом объединяешь с этой таблицей по дате и заказу и берешь максимум от даты таблицы, а затем выбираешь из таблицы по максимум дате и заказу
|
|||
2
mistеr
22.03.21
✎
14:09
|
(0) Срез первых без задания периода, с условием на список значений. Получаешь таблицу с датами.
Далее алгоритм "срез последних на каждый день". |
|||
3
ptitc0
22.03.21
✎
14:11
|
(2) Проблема в том, что условие должно не к первым прилагаться, а к последним. Т.е. мне надо выбрать срез первых вообще по всем заказам?
|
|||
4
mistеr
22.03.21
✎
14:14
|
(3) В смысле это список значений ресурса, не измерения?
Ну что ж, по всем, так по всем. |
|||
5
ptitc0
22.03.21
✎
14:20
|
(4) Да список значений ресурса (((
Изначально был отбор по срезу первых, но руководство посчитало, что в течение дня можно менять и надо брать на конец дня. А просмотр последних значений, по результатам изначальной выборки дает лишние с одной стороны и не дает некоторые заказы с другой. Боюсь, что через пару дней они решат, что значение можно менять более одного дня ))) Ладно всем спасибо. Когда сформулировал вопрос тут, самому как-то легче стало. Попробую это как-то запросом описать все. |
|||
6
ptitc0
23.03.21
✎
13:39
|
Если кому-то будет интересно, как я реализовал:
1) Запрос к срезу первых регистра сведений в разрезе заказов, с отбором по нужному мне виду события, где период (время регистрации события) представлен как КОНЕЦПЕРИОДА(МойРегистрСрезПервых.Период, ДЕНЬ) КАК ДатаРегистрации все это во временную таблицу 1 с индексированием по заказу и дате регистрации 2) Запрос к регистру сведений с отбором по нужному мне виду события в разрезе заказов и периода (т.е. выбираются вообще все записи) все это во временную таблицу 2 с индексированием по заказу и дате 3) Запрос к таблице 2, в разрезе заказов выбираются период, еще раз он же но в функции КОНЕЦПЕРИОДА(Таблица2.Период, ДЕНЬ) КАК ДеньУстановки с группировкой по заказу и дню установки и функцией МАКСИМУМ к периоду (т.е. выбираются последние записи на каждый день по каждому заказу) все это во временную таблицу 3 с индексированием по заказу и дате 4) Запрос к таблицам 1, 2, 3 таблица 1 связь с таблицей 2 по заказу и Таблица1.датаРегистрации >= Таблица2.Период Таблица 2 с таблицей 3 по заказу и (вот тут важный момент) по Таблица2.Период=Таблица3.ВремяУстановки Важен этот момент тем, что в таблице 3 у нас только дата события есть, а во второй нужные нам данные, а связав по периоду из третьей таблицы, мы однозначно ткнули пальцем на нужные нам данные во второй таблице. Первая же таблица отсекла по >= все более старые периоды, кроме первого дня установки. На всякий случай кинул это в таблицу 4 с нужными мне в дальнейшем полями и индексацией по заказу и убил таблицы 1,2,3 5) Из таблицы 4 забран нужные мне данные Проверки показали, что все работает До того, как добавил индексацию, запрос работал раз в 10 дольше. Буду рад, если кому-то это пригодится. Спасибо за советы. |
|||
7
ptitc0
23.03.21
✎
13:51
|
(6) небольшое пояснение
В таблицу1 попали все дни первой установки нужного события в разрезе заказа в таблицу2 попали все установки нужного события в разрезе заказа в таблицу3 попали только дата.время последней установки нужного события на каждый день (по сути срез последних на этот день) в таблицу4 пошли события произошедшие вплоть до времени из таблицы1 (в течение первого дня) совпадающих по времени с таблицей3 (т.е. самое последнее событие на тот день) в пункте 5 еще отрабатывается условие, что нужное нам значение события входит в список значений, но это уже мелочи, важен сам алгоритм |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |