|
Помогите с запросом. Новые клиенты | ☑ | ||
---|---|---|---|---|
0
SuperUser
05.06.17
✎
09:05
|
Туплю, не могу сделать запрос, где выбираются новые клиенты за период. Новые - если первая продажа была в выбранном периоде
ВЫБРАТЬ РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент ПОМЕСТИТЬ Продажи ИЗ РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// Получаю здесь дату ВЫБРАТЬ Продажи.Контрагент, МАКСИМУМ(РеализацияТоваровУслуг.Дата) КАК ДатаПродажи ПОМЕСТИТЬ ПродажиСДатами ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ВНУТРЕННЕЕ СОЕДИНЕНИЕ Продажи КАК Продажи ПО РеализацияТоваровУслуг.Контрагент = Продажи.Контрагент СГРУППИРОВАТЬ ПО Продажи.Контрагент ; Как отсюда убрать тех, кто покупал ранее? |
|||
1
RomaH
naïve
05.06.17
✎
09:07
|
ПО РеализацияТоваровУслуг.Контрагент = Продажи.Контрагент
И дата < Дата где есть null |
|||
2
torgm
05.06.17
✎
09:12
|
(0) можно поразному ,
можно количество покупок =1 можно минимальнаядатапокупки=максимальнаядатапокупки и т.д. и т.п. |
|||
3
SuperUser
05.06.17
✎
09:17
|
(1) (2) Спасибо
|
|||
4
mc lammer
05.06.17
✎
09:26
|
(2)
//количество покупок =1 можно минимальнаядатапокупки=максимальнаядатапокупки некорректные условия |
|||
5
Ёпрст
05.06.17
✎
09:30
|
(0)
Имеющие МАКСИМУМ(РеализацияТоваровУслуг.Дата) Между &Начпериода и &КонПериода |
|||
6
Ёпрст
05.06.17
✎
09:31
|
(0) Ну и там не максимум нужен везде, а МИНИМУМ.
|
|||
7
Ёпрст
05.06.17
✎
09:34
|
+6
ВЫБРАТЬ РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент ПОМЕСТИТЬ Продажи ИЗ РегистрНакопления.Продажи.Обороты(&Начпериода, &КонПериода, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// Получаю здесь дату ВЫБРАТЬ Продажи.Контрагент ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ВНУТРЕННЕЕ СОЕДИНЕНИЕ Продажи КАК Продажи ПО РеализацияТоваровУслуг.Контрагент = Продажи.Контрагент СГРУППИРОВАТЬ ПО Продажи.Контрагент Имеющие МИНИМУМ(РеализацияТоваровУслуг.Дата) Между &Начпериода и &КонПериода |
|||
8
dezss
05.06.17
✎
09:36
|
(7) не учитывается, были раньше продажи или нет.
Тут же надо выбрать только тех, кому была первая продажа в периоде, а до этого их не было. ИМХО, надо просто отсекать тех, кому до начала периода хоть что-то продавали, а потом уже выбирать тех, кому за этот период продавали. |
|||
9
Ёпрст
05.06.17
✎
09:40
|
(8) И ? Еще раз подумай.
|
|||
10
Ёпрст
05.06.17
✎
09:41
|
+9 да, внутреннее соединение тут усё портит
|
|||
11
Ёпрст
05.06.17
✎
09:42
|
хотя не, всё норм там. Унутреннее, только на клиентоса фильтр накладывает.
|
|||
12
dezss
05.06.17
✎
09:47
|
(9) недосмотрел ИМЕЮЩИЕ
но лучше такие конструкции не использовать, медленнее будет. ИМХО, лучше левым РегистрНакопления.Продажи.Обороты(, &Начпериода, , ) как ОборИскл ГДЕ ОборИскл.Контрагент есть null хотя надо пробовать и смотреть что быстрей отработает. |
|||
13
SuperUser
05.06.17
✎
09:47
|
Сделал Так
ВЫБРАТЬ РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент ПОМЕСТИТЬ Продажи ИЗ РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Продажи.Контрагент, МАКСИМУМ(РеализацияТоваровУслуг.Дата) КАК ДатаПродажи ПОМЕСТИТЬ СДатами ИЗ Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПО (РеализацияТоваровУслуг.Контрагент = Продажи.Контрагент) И (РеализацияТоваровУслуг.Дата < &Начало) СГРУППИРОВАТЬ ПО Продажи.Контрагент ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СДатами.Контрагент, СДатами.ДатаПродажи, РеализацияТоваровУслуг.Дата ИЗ СДатами КАК СДатами ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПО СДатами.Контрагент = РеализацияТоваровУслуг.Контрагент ГДЕ СДатами.ДатаПродажи ЕСТЬ NULL (11) Попробую твой вариант |
|||
14
dezss
05.06.17
✎
09:53
|
(13) лучше используй не Документ.РеализацияТоваровУслуг, а РегистрНакопления.Продажи.
Там есть индексы, а это ускорит выборку, хотя опять таки, надо пробовать, есть ли именно те индексы, которые тебе нужны. Придется отказаться от использования вирт. таблиц, но это может ускорить. |
|||
15
eryomin
05.06.17
✎
09:59
|
(13) может, лучше так?
<CODE> ВЫБРАТЬ РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент ПОМЕСТИТЬ Клиенты ИЗ РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент ПОМЕСТИТЬ КлиентыСтарые ИЗ РегистрНакопления.Продажи.Обороты(, &Начало, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Продажи.Контрагент, МАКСИМУМ(РеализацияТоваровУслуг.Дата) КАК ДатаПродажи ПОМЕСТИТЬ СДатами ИЗ Клиенты КАК Клиенты ЛЕВОЕ СОЕДИНЕНИЕ КлиентыСтарые КАК КлиентыСтарые ПО Клиенты.Контрагент = КлиентыСтарые.Контрагент ГДЕ КлиентыСтарые.Контрагент ЕСТЬ NULL </CODE> |
|||
16
НЕА123
05.06.17
✎
10:00
|
ВЫБРАТЬ
Продажи.Контрагент ИЗ РегистрНакопления.Продажи КАК Продажи СГРУППИРОВАТЬ ПО Продажи.Контрагент Имеющие Продажи.Период > &КонПериода ИМХО не только РеализацияТоваровУслуг есть продажа. |
|||
17
eryomin
05.06.17
✎
10:01
|
Конечно же:
<CODE> ... ВЫБРАТЬ Клиенты.Контрагент ... </CODE> |
|||
18
НЕА123
05.06.17
✎
10:01
|
*
Имеющие МИНИМУМ(Продажи.Период) > &КонПериода |
|||
19
eryomin
05.06.17
✎
10:07
|
попробую еще раз:
<CODE> ВЫБРАТЬ РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент ПОМЕСТИТЬ Клиенты ИЗ РегистрНакопления.Продажи.Обороты(&Начало, &Конец, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ПродажиОбороты.Контрагент ПОМЕСТИТЬ КлиентыСтарые ИЗ РегистрНакопления.Продажи.Обороты(, &Начало, , ) КАК ПродажиОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Клиенты ИЗ Клиенты КАК Клиенты ЛЕВОЕ СОЕДИНЕНИЕ КлиентыСтарые КАК КлиентыСтарые ПО Клиенты.Контрагент = КлиентыСтарые.Контрагент ГДЕ КлиентыСтарые.Контрагент ЕСТЬ NULL </CODE> |
|||
20
eryomin
05.06.17
✎
10:07
|
что-то ни фига не получается с форматированием
|
|||
21
dezss
05.06.17
✎
10:21
|
(16) ПродажиОбороты.Регистратор ссылка документ.РеализацияТоваровУслуг
тока в вирт таблицах их нет, кажись...но один фиг, будет же индекс |
|||
22
patria0muerte
05.06.17
✎
10:50
|
ВЫБРАТЬ РАЗРЕШЕННЫЕ
МИНИМУМ(Т.Период) КАК Период, Т.Контрагент ИЗ РегистрНакопления.Продажи.Обороты(, , День, ) КАК Т СГРУППИРОВАТЬ ПО Т.Контрагент ИМЕЮЩИЕ МИНИМУМ(Т.Период) >= &ГраницаПроверки |
|||
23
eryomin
05.06.17
✎
11:02
|
(22) и всего делов-то :)
|
|||
24
dezss
05.06.17
✎
11:05
|
(22) ага-ага...у виртуальной таблицы есть период, ага...
|
|||
25
patria0muerte
05.06.17
✎
11:06
|
(23) Ну, подобное предложили еще в (16). Только к реальной таблице обращаясь.
Вообще по быстродействию не особо, неплохо бы какие-то отборы все же задать. Т.е. например, клиент, который не покупал более 3х - лет считается новым. И т.д... (24) Если это сарказм, то я его не понял.. |
|||
26
eryomin
05.06.17
✎
11:07
|
(24) период есть, но можно и без виртуальной таблицы обойтись
|
|||
27
patria0muerte
05.06.17
✎
11:10
|
Если без отборов, то видимо действительно лучше к реальной таблице обратиться. По быстродействию чуть веселее у меня вышло..
|
|||
28
НЕА123
05.06.17
✎
11:10
|
почти ОФФ
у виртуальной таблицы можно все-таки Период получить? |
|||
29
dezss
05.06.17
✎
11:10
|
(26) хм...а у меня нету...вот прям стопудова нету...скопипастил этот запрос и ругаеццо...
|
|||
30
eryomin
05.06.17
✎
11:12
|
(29) зато у тебя, наверное, есть ПериодДень, ПериодМесяц ... :)
|
|||
31
eryomin
05.06.17
✎
11:16
|
(28) да, задавай конкретную периодичность
|
|||
32
eryomin
05.06.17
✎
11:19
|
(27) конечно
|
|||
33
dezss
05.06.17
✎
11:38
|
(30) тьфу....понял...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |