|
Как запросом из среза получить период с...по | ☑ | ||
---|---|---|---|---|
0
Azxcvbn
24.05.16
✎
08:15
|
Есть запрос, который вытаскивает вот такую таблицу
http://i77.fastpic.ru/big/2016/0524/62/0e507c1a2728168788127e2b143df762.png Есть ли идея как запросом из этой таблицы, сделать вот такую? http://i78.fastpic.ru/big/2016/0524/89/ed0e7f45d7b0c7a2980afc7044ebe589.png |
|||
1
assasu
24.05.16
✎
08:16
|
проще простого
|
|||
2
Azxcvbn
24.05.16
✎
08:16
|
(1) подскажи
|
|||
3
assasu
24.05.16
✎
08:18
|
функции для работы с датами есть. их можно использовать в запросе.
|
|||
4
rphosts
24.05.16
✎
08:22
|
(0) соедини таблицу саму с собой отбирая каждой дате парную дату - минимальную из тех что больше её - получишь все периоды кроме последнего. С последнем реши сам.
|
|||
5
Лефмихалыч
24.05.16
✎
08:27
|
срез последних на каждую дату
|
|||
7
Лефмихалыч
24.05.16
✎
08:32
|
не - нахер - холиваров не будет
|
|||
8
ЛучшийПрограммер1С
24.05.16
✎
08:33
|
||||
9
Тролль главный
24.05.16
✎
08:38
|
(7) вчера полиморфизм норм было
|
|||
10
ЛучшийПрограммер1С
24.05.16
✎
08:44
|
Ну типа такого кода надо:
ВЫБРАТЬ УстановленоНаТС.Период КАК ДатаУстановкиШиныНаТС, МИНИМУМ(СнятоСТС.Период) КАК ДатаСнятияШиныСТС ИЗ РегистрСведений.уатАгрегатыТС КАК УстановленоНаТС ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.уатАгрегатыТС КАК СнятоСТС ПО УстановленоНаТС.СерияНоменклатуры = СнятоСТС.СерияНоменклатуры И УстановленоНаТС.ТС = СнятоСТС.ТС И (СнятоСТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.Снято)) И (СнятоСТС.Период >= УстановленоНаТС.Период) ГДЕ УстановленоНаТС.СерияНоменклатуры = &Шина И УстановленоНаТС.СостояниеАгрегата = ЗНАЧЕНИЕ(Перечисление.уатСостоянияАгрегатов.УстановленоВРаботе) СГРУППИРОВАТЬ ПО УстановленоНаТС.Период Только у Вас не надо сравнивать на установлено-снято |
|||
11
ЛучшийПрограммер1С
24.05.16
✎
08:49
|
Наверное как-то так:
ВЫБРАТЬ Период НачалоПериода, МИНИМУМ(Конец.Период) КАК ДКонецПериода ИЗ РегистрСведений.Должности КАК ДолжностиС ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Должности КАК ДолжностиПо ПО ДолжностиПо.Период > ДолжностиС.Период) СГРУППИРОВАТЬ ПО ДолжностиПо.Период |
|||
12
ЛучшийПрограммер1С
24.05.16
✎
08:53
|
Поправил опечатки:
ВЫБРАТЬ Период НачалоПериода, МИНИМУМ(ДолжностиПо.Период) КАК КонецПериода ИЗ РегистрСведений.Должности КАК ДолжностиС ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Должности КАК ДолжностиПо ПО ДолжностиПо.Период > ДолжностиС.Период СГРУППИРОВАТЬ ПО ДолжностиПо.Период |
|||
13
ЛучшийПрограммер1С
24.05.16
✎
09:00
|
Хотя вот пишут, что на больших объемах это долго работает и что есть какой-то супер быстрых из 13-ти запросов метод http://catalog.mista.ru/public/402534/
|
|||
14
Тролль главный
24.05.16
✎
09:14
|
(13) я так понял там ограниченное заранее известное число периодов
|
|||
15
Ildarovich
24.05.16
✎
10:47
|
(14) Нет, ограничений там особых нет. 13 подзапросов перекрывают интервал анализа 8196 дней - это двадцать пять лет. Но имеет смысл применять, когда для одного сотрудника более сотни интервалов в файловой базе. И 1500 в сиквельной. Иначе классический метод будет быстрее (немного). В статье он, кстати, тоже описан.
|
|||
16
ЛучшийПрограммер1С
24.05.16
✎
11:34
|
(15) Я немного ошибся - там их не 13, а то ли 33, то ли 34. )
|
|||
17
Ildarovich
24.05.16
✎
12:05
|
(16) Может и ошиблись, но ответ (случайно?) оказался правильным.
Число минимально необходимых подзапросов рассчитывается как ]Log2(N)[, где N - общая длина анализируемого интервала. В тех единицах, которые интересуют. Если единицы - дни (как в данной теме), то для 25 лет хватит 13 запросов. Если единицы - секунды, то для тех же 25-ти лет хватит 30-ти запросов. Но! - "Лишние" запросы обрабатывают всего по одной записи и поэтому на быстродействии никак не сказываются. Их можно брать "с запасом", как в статье. Там их 32. |
|||
18
Azxcvbn
24.05.16
✎
12:07
|
(13) Вообщем спасибо, у меня все получилось.
Удивительно, что я сразу в гугле не нашел эту тему, неправильно гуглил, оказывается распространенная проблема :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |