|
Срез последних на каждую дату | ☑ | ||
---|---|---|---|---|
0
repin_mike
09.11.18
✎
16:37
|
Нужно выбрать Количество(*) из РаботникиОрганизаций.СрезПоследних(&Дата) на каждый день допустим 2018 года. Только запрос без СКД. Прочитал уже две статьи в инете, ну вот http://catalog.mista.ru/public/77568/ например - только у них там цены номенклатуры и так уже есть в таблице, просто соединяют на меньше-равно. Как быть в моём случае не знаю. Натолкните на мысль плз.
|
|||
1
VladZ
09.11.18
✎
16:42
|
(0) Толкаю на мысль: нужно просто соединять на меньше-равно.
|
|||
2
azernot
09.11.18
✎
16:43
|
Правильно ли я понимаю, что надо ещё что=то типа "НЕ Состояние = Уволен"
|
|||
3
repin_mike
09.11.18
✎
17:03
|
(0) Ну ОК, вот я взял курсы валют на каждый день, они слева. И присоеднияю регистр сведений по сотрудникам. Агрегатная функция в примере - максимум. Я же не могу взять количество сотрудников, у которых дата меньше-равно, там же и принятые и уволенные и перемещённые. И как быть?
|
|||
4
azernot
09.11.18
✎
17:14
|
(3) Что тебе надо получить? Количество различных значений измерений на каждый день?
|
|||
5
RomanYS
09.11.18
✎
17:15
|
(3) ВЫБРАТЬ
Начало.ЗанимаемыхСтавок, Начало.Сотрудник, Начало.Период ПОМЕСТИТЬ ВТ ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Начало, ) КАК Начало ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РаботникиОрганизаций.ЗанимаемыхСтавок, РаботникиОрганизаций.Сотрудник, РаботникиОрганизаций.Период ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ГДЕ РаботникиОрганизаций.Период МЕЖДУ &Начало И &Конец ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Сотрудник, ВТ.ЗанимаемыхСтавок, ВТ.Период КАК ПериодС, МИНИМУМ(ЕСТЬNULL(ДОБАВИТЬКДАТЕ(ВТ1.Период, СЕКУНДА, -1), &Конец)) КАК ПериодПо ПОМЕСТИТЬ Интервалы ИЗ ВТ КАК ВТ ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ КАК ВТ1 ПО ВТ.Сотрудник = ВТ1.Сотрудник И ВТ.Период < ВТ1.Период СГРУППИРОВАТЬ ПО ВТ.Сотрудник, ВТ.Период, ВТ.ЗанимаемыхСтавок потом Интервалы соединяешь с датами и группироуешь |
|||
6
azernot
09.11.18
✎
17:17
|
До 01.01.18 Приняты Волков, Зайцев, Мишин в Ромашка;
приняты Краснов, Желтов, Зеленов в Василёк. 01.01.18 Принят Иванов в Ромашка 02.01.18 Принят Петров в Василёк 03.01.18 Уволен Волков из Ромашка 04.01.18 Принят Волков в Василёк 05.01.18 Уволен Краснов из Ваислёк Какие данные должен выдать запрос за период с 01 по 05 января 18? |
|||
7
azernot
09.11.18
✎
18:01
|
Вот запрос получающий полный срез последних на каждую дату периода.
Условия: 1. В регистре сведений РаботникиОрганизаций два измерения - Сотрудник - Организация 2. За указанный период должен быть заполнен производственный календарь ВЫБРАТЬ РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря ПОМЕСТИТЬ ДатыПериода ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериода И &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РаботникиОрганизацийСрезПоследних.Период, РаботникиОрганизацийСрезПоследних.Сотрудник, РаботникиОрганизацийСрезПоследних.Организация, РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок, РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации, РаботникиОрганизацийСрезПоследних.Должность, РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния, РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделение ПОМЕСТИТЬ НачальныйСрезСИзменениями ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, -1), ДЕНЬ), ) КАК РаботникиОрганизацийСрезПоследних ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ РаботникиОрганизаций.Период, РаботникиОрганизаций.Сотрудник, РаботникиОрганизаций.Организация, РаботникиОрганизаций.ЗанимаемыхСтавок, РаботникиОрганизаций.ПодразделениеОрганизации, РаботникиОрганизаций.Должность, РаботникиОрганизаций.ПричинаИзмененияСостояния, РаботникиОрганизаций.ОбособленноеПодразделение ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ГДЕ РаботникиОрганизаций.Период МЕЖДУ &НачалоПериода И &КонецПериода ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДатыПериода.ДатаКалендаря КАК ДатаКалендаря, НачальныйСрезСИзменениями.Сотрудник, НачальныйСрезСИзменениями.Организация, МАКСИМУМ(НачальныйСрезСИзменениями.Период) КАК Период ПОМЕСТИТЬ ДатыПоследнихЗначений ИЗ ДатыПериода КАК ДатыПериода ВНУТРЕННЕЕ СОЕДИНЕНИЕ НачальныйСрезСИзменениями КАК НачальныйСрезСИзменениями ПО ДатыПериода.ДатаКалендаря >= НачальныйСрезСИзменениями.Период СГРУППИРОВАТЬ ПО НачальныйСрезСИзменениями.Сотрудник, НачальныйСрезСИзменениями.Организация, ДатыПериода.ДатаКалендаря ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДатыПоследнихЗначений.ДатаКалендаря КАК ДатаКалендаря, НачальныйСрезСИзменениями.Сотрудник КАК Сотрудник, НачальныйСрезСИзменениями.Организация, НачальныйСрезСИзменениями.ЗанимаемыхСтавок, НачальныйСрезСИзменениями.ПодразделениеОрганизации, НачальныйСрезСИзменениями.Должность, НачальныйСрезСИзменениями.ПричинаИзмененияСостояния, НачальныйСрезСИзменениями.ОбособленноеПодразделение, НачальныйСрезСИзменениями.Период ИЗ ДатыПоследнихЗначений КАК ДатыПоследнихЗначений ВНУТРЕННЕЕ СОЕДИНЕНИЕ НачальныйСрезСИзменениями КАК НачальныйСрезСИзменениями ПО ДатыПоследнихЗначений.Сотрудник = НачальныйСрезСИзменениями.Сотрудник И ДатыПоследнихЗначений.Организация = НачальныйСрезСИзменениями.Организация И ДатыПоследнихЗначений.Период = НачальныйСрезСИзменениями.Период УПОРЯДОЧИТЬ ПО ДатаКалендаря ИТОГИ КОЛИЧЕСТВО(Сотрудник) ПО ДатаКалендаря |
|||
8
Ns33
09.11.18
✎
18:05
|
Мой вариант: диапазон дат генерится(код был, вроде с мисты выдрал), считаем при принятии +1 чел, при увольнении -1 чел
ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачГода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период ПОМЕСТИТЬ ВТДаты {ВЫБРАТЬ Период} ИЗ (ВЫБРАТЬ 0 КАК a ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК aa ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК b ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК bb ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК c ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК cc ПО (ИСТИНА) ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 0 КАК d ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9) КАК dd ПО (ИСТИНА) ГДЕ aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачГода, &КонГода, ДЕНЬ) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, ДЕНЬ) КАК Период, СУММА(1) КАК Кво ПОМЕСТИТЬ ВТТабл ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ГДЕ РаботникиОрганизаций.ПричинаИзмененияСостояния = &Принят И РаботникиОрганизаций.Период > &НачГода СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, ДЕНЬ) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, ДЕНЬ), СУММА(-1) ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ГДЕ РаботникиОрганизаций.ПричинаИзмененияСостояния = &Уволен И РаботникиОрганизаций.Период > &НачГода СГРУППИРОВАТЬ ПО НАЧАЛОПЕРИОДА(РаботникиОрганизаций.Период, ДЕНЬ) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ &НачГода, КОЛИЧЕСТВО(*) ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(ДОБАВИТЬКДАТЕ(&НачГода, СЕКУНДА, -1), ) КАК РаботникиОрганизацийСрезПоследних ГДЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния = &Принят ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТДаты.Период, ВТТабл.Кво ПОМЕСТИТЬ ВТТаблСДатами ИЗ ВТДаты КАК ВТДаты ЛЕВОЕ СОЕДИНЕНИЕ ВТТабл КАК ВТТабл ПО ВТДаты.Период = ВТТабл.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТТаблСДатами.Период КАК Период, ВТТаблСДатами.Кво КАК Кво, ВТТаблСДатами1.Период КАК Период1, ВТТаблСДатами1.Кво КАК Кво1 ПОМЕСТИТЬ ВТСоед ИЗ ВТТаблСДатами КАК ВТТаблСДатами ЛЕВОЕ СОЕДИНЕНИЕ ВТТаблСДатами КАК ВТТаблСДатами1 ПО ВТТаблСДатами.Период >= ВТТаблСДатами1.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТСоед.Период КАК Период, СУММА(ВТСоед.Кво1) КАК Кво ИЗ ВТСоед КАК ВТСоед СГРУППИРОВАТЬ ПО ВТСоед.Период УПОРЯДОЧИТЬ ПО Период |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |