Вход | Регистрация


Отчет по посещениям.

Отчет по посещениям.
Я
   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
(3) (4) Отчет формируется только за полный месяц. Если клиент ходит раз в 2 месяца, будет тренеру 6 раз идти как потерянный. Но таких явно не много. Или вообще нет таких.
   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) Да уж, разжевал и в рот положил. Спасибо большое.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует