|
Как бы в запросе получить разницу между периодами? | ☑ | ||
---|---|---|---|---|
0
Капюшон
08.06.12
✎
11:37
|
Есть запрос, который выдает выборку периодов месяца, в которые велись продажи тоесть в нём будут записи
01.01.12 01.02.12 01.05.12 тоесть только те периоды, в которые были продажи. как мне запросом получить следующую таблицу, чтобы первое поле было периодом, а второе поле было числом, показывающим количество месяцев между текущим периодом и следующим в который была продажа? для данного примера вот такую: 01.01.12 - 1 01.02.12 - 3 01.05.12 - |
|||
1
Buster007
08.06.12
✎
11:46
|
Т1, Т2 - таблица продаж с периодами
Берешь к Т1 присоединяешь Т2 с условием Т1.Период < Т2.Период Группируешь, выбираешь минимум Т2.Период Далее РазностьДат(Т1.Период, здесь будет след. дата, День) и всего делов-то |
|||
2
Капюшон
08.06.12
✎
12:36
|
(1)благодарю. я сделал. Но вот разность дат не работает
//////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т4.Контрагент, Т4.НоменклатураНоменклатурнаяГруппа, Т4.КоличествоОборот, Т4.Период1 Как Период1, Т4.Период2 Как Период2, РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ) ИЗ Т4 КАК Т4 Выдаётся ошибка. в чем может быть дело? |
|||
3
ZanderZ
08.06.12
✎
12:38
|
(2) ошибку то какую ?
|
|||
4
Капюшон
08.06.12
✎
12:42
|
(3){Форма.Форма(778)}: Ошибка при вызове метода контекста (Выполнить): {(7, 22)}: Неверные параметры "РАЗНОСТЬДАТ"
РАЗНОСТЬДАТ(Период1,<<?>>Период2,МЕСЯЦ) |
|||
5
Капюшон
08.06.12
✎
12:43
|
{Форма.Форма(778)}: Ошибка при вызове метода контекста (Выполнить): {(7, 25)}: Неверные параметры "РАЗНОСТЬДАТ"
РАЗНОСТЬДАТ(Т4.Период1,<<?>>Т4.Период2,МЕСЯЦ) |
|||
6
Maxus43
08.06.12
✎
12:45
|
там тип дата точно? без строки РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ)
всё номрально выводит? |
|||
7
Капюшон
08.06.12
✎
12:47
|
(6)да. без этой строки всё нормально. А Периоды имеют тип "период". вот весь пакет запросов:
ВЫБРАТЬ ПродажиОбороты.Контрагент, ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа, ПродажиОбороты.Период, СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот ПОМЕСТИТЬ Т1 ИЗ РегистрНакопления.Продажи.Обороты( &ВыбНачПериода, &ВыбКонПериода, Месяц, Контрагент = &ВыбКонтрагент И Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Контрагент, ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа, ПродажиОбороты.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПродажиОбороты.Контрагент, ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа, ПродажиОбороты.Период, СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот ПОМЕСТИТЬ Т2 ИЗ РегистрНакопления.Продажи.Обороты( &ВыбНачПериода, &ВыбКонПериода, Месяц, Контрагент = &ВыбКонтрагент И Номенклатура.НоменклатурнаяГруппа = &НоменклатурнаяГруппа) КАК ПродажиОбороты СГРУППИРОВАТЬ ПО ПродажиОбороты.Контрагент, ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа, ПродажиОбороты.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т1.Контрагент, Т1.НоменклатураНоменклатурнаяГруппа, Т1.Период, Т1.КоличествоОборот, Т2.Период КАК Период1 ПОМЕСТИТЬ Т3 ИЗ Т1 КАК Т1 ЛЕВОЕ СОЕДИНЕНИЕ Т2 КАК Т2 ПО Т1.Период < Т2.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т3.Контрагент, Т3.НоменклатураНоменклатурнаяГруппа, Т3.КоличествоОборот, Т3.Период КАК Период1, ЕСТЬNULL(МИНИМУМ(Т3.Период1), 0) КАК Период2 ПОМЕСТИТЬ Т4 ИЗ Т3 КАК Т3 СГРУППИРОВАТЬ ПО Т3.Контрагент, Т3.НоменклатураНоменклатурнаяГруппа, Т3.КоличествоОборот, Т3.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Т4.Контрагент, Т4.НоменклатураНоменклатурнаяГруппа, Т4.КоличествоОборот, Т4.Период1 Как Период1, Т4.Период2 Как Период2, РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ) ИЗ Т4 КАК Т4 |
|||
8
salvator
08.06.12
✎
12:48
|
(6) +1 Тип скорее всего не дата
|
|||
9
Zmich
08.06.12
✎
12:48
|
(5). ВЫБОР
КОГДА Т4.Период2 ЕСТЬ NULL ТОГДА 0 ИНАЧЕ РАЗНОСТЬДАТ(Т4.Период1,Т4.Период2,МЕСЯЦ) КОНЕЦ |
|||
10
Капюшон
08.06.12
✎
12:50
|
Похоже РАЗНОСТЬДАТ может принимать только внешние параметры. потому что
строчка РАЗНОСТЬДАТ(ВыбНачПериода&,ВыбКонПериода&,МЕСЯЦ) работает. |
|||
11
ZanderZ
08.06.12
✎
12:51
|
(10) это ты нагло врешь - проверяй на null как в (9)
|
|||
12
luckyluke
08.06.12
✎
12:51
|
(10)
>>Похоже РАЗНОСТЬДАТ может принимать только внешние параметры. потому что Не только внешние, проверяй типы в таблицах. |
|||
13
Zmich
08.06.12
✎
12:55
|
(10). У последней продажи нет следующего периода, поэтому Т4.Период2 будет NULL.
Хотя смотря как ты Т4 формируешь. |
|||
14
Капюшон
08.06.12
✎
12:56
|
спасибо всем! всё дело было в NULL
|
|||
15
эцп
08.06.12
✎
12:58
|
(7) стоит записать не так:
|ЕСТЬNULL(МИНИМУМ(Т3.Период1), 0) КАК Период2 а вот так: |МИНИМУМ(ЕСТЬNULL(Т3.Период1, ДОБАВИТЬКДАТЕ(&ВыбКонПериода, СЕКУНДА, 1))) КАК Период2 |
|||
16
эцп
08.06.12
✎
13:00
|
(7) а запросы, формирующие Т3 и Т4, объединить в один
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |