|
| ||
Zombi 28.09.16 - 15:20 | Есть регистр накопления с данными по посещениям клиентов(период, клиент, тренер и.т.д.) Необходимо сделать отчет где выводить действующих клиентов, новых и потерянных. Сортировать клиентов нужно исходя из даты последнего посещения. Проблема в том, что отчет нужен по периодам. То есть формируем за год, должны получить потерянных клиентов за январь(потерянный клиент это тот у кого дата последнего посещения меньше чем январь - 1 месяц), потерянных клиентов за февраль(дата последнего посещения меньше чем февраль - 1 месяц) и.т.д. Ну все это надо в запросе, конечно. Может кто то подобное делал, киньте запрос, пожалуйста. | ||
Nuobu 1 - 28.09.16 - 15:21 | Когда будешь строить запрос, то вместо первой даты, отними от неё 1 месяц. | ||
Горогуля 2 - 28.09.16 - 15:25 | я на коленке такое ваял. сравнение сумм указанного периода с прошлым годом. используй силу полного соединения | ||
ovrfox 3 - 28.09.16 - 15:32 | Неоднозначная задача. Не указано каким считать клиента, который посещает раз в два месяца.
Это шесть раз потерянный клиент или если на дату отчета период меньше месяца, то он не потеряный? | ||
ovrfox 4 - 28.09.16 - 15:34 | И , кстати, если клиент уехал на рождественские каникулы с 25.12 по 14.01, то до 15 числа в январе считать его потерянным, а с 15 уже не считать таковым? Или как-то по другому? | ||
Zombi 5 - 28.09.16 - 15:40 | |||
ovrfox 6 - 28.09.16 - 16:43 | ВЫБРАТЬ
0 КАК Сдвиг
ПОМЕСТИТЬ Сдвиги
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
1
ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 10 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 11 ОБЪЕДИНИТЬ ВСЕВЫБРАТЬ 12 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(&ДатаОтч, МЕСЯЦ), МЕСЯЦ, -Сдвиги.Сдвиг) КАК НачПериода ПОМЕСТИТЬ Периоды ИЗ Сдвиги КАК Сдвиги ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(Посещения.Период) КАК Период, Посещения.Клиент КАК Клиент, Периоды.НачПериода КАК НачПериода ПОМЕСТИТЬ ПоследниеПосещения ИЗ РегистрСведений.Посещения КАК Посещения ВНУТРЕННЕЕ СОЕДИНЕНИЕ Периоды КАК Периоды ПО Посещения.Период < Периоды.НачПериода СГРУППИРОВАТЬ ПО Посещения.Клиент, Периоды.НачПериода ИМЕЮЩИЕ МАКСИМУМ(Посещения.Период) >= ДОБАВИТЬКДАТЕ(Периоды.НачПериода, МЕСЯЦ, -1) ИНДЕКСИРОВАТЬ ПО Клиент, НачПериода ; ////////////////////////////////////////////////////////////////////////////////ВЫБРАТЬ ПППред.Клиент, ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, -1) КАК НачПериода, ПППред.НачПериода КАК КонПериода ПОМЕСТИТЬ Новые ИЗ ПоследниеПосещения КАК ПППред ГДЕ ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 12) <> НАЧАЛОПЕРИОДА(&ДатаОтч, МЕСЯЦ) И НЕ (ПППред.Клиент, ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, -1)) В (ВЫБРАТЬ ПоследниеПосещения.Клиент, ПоследниеПосещения.НачПериода ИЗ ПоследниеПосещения) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬПППред.Клиент, ПППред.НачПериода, ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 1) КАК КонПериода ПОМЕСТИТЬ Потерянные ИЗ ПоследниеПосещения КАК ПППред ГДЕ ПППред.НачПериода <> НАЧАЛОПЕРИОДА(&ДатаОтч, МЕСЯЦ) И НЕ (ПППред.Клиент, ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 1)) В (ВЫБРАТЬ ПоследниеПосещения.Клиент, ПоследниеПосещения.НачПериода ИЗ ПоследниеПосещения) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬПППред.Клиент, ПППред.НачПериода,
ПППост.НачПериода КАК КонПериода
ПОМЕСТИТЬ Текущие
ИЗ
ПоследниеПосещения КАК ПППред
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПоследниеПосещения КАК ПППост
ПО ПППред.Клиент = ПППост.Клиент
И (ДОБАВИТЬКДАТЕ(ПППред.НачПериода, МЕСЯЦ, 1) = ПППост.НачПериода) | ||
Zombi 7 - 29.09.16 - 08:00 | (6) Да уж, разжевал и в рот положил. Спасибо большое. |
|
Список тем форума
|