Я пытаюсь получить количество клиентов, возвращающихся за дополнительными услугами, которое учитывает сравнение оценочных баллов до предоставления услуги, сгруппированных по типу услуги. (В конечном счете, я также хочу иметь возможность игнорировать возвраты, которые находятся в течение месяца после первоначального обслуживания, но я почти уверен, что смогу разобрать эту морщинку самостоятельно)
При подсчете результатов для конкретной службы следует учитывать возврат к любому типу службы, а не только к исходному типу службы. (Изменить: * Он также должен учитывать все будущие доходы, а не только следующий или самый последний *).
Его не нужно часто запускать, но существует более 15 000 строк данных, и вычислительные ресурсы ограничены недостаточно мощным компьютером (это для некоммерческой организации), поэтому эффективность была бы хорошей, но не абсолютно необходимой.
Пример данных
ServiceTable
CustomerID Service Date ScoreBefore
A Service1 1/1/2017 1
A Service2 1/3/2017 1
A Service1 1/1/2018 4
B Service3 3/1/2018 3
B Service1 6/1/2018 1
B Service1 6/2/2018 1
C Service2 1/1/2019 4
C Service2 6/1/2019 1
Результаты должны быть (без учета опции дополнения дат):
Service1
ReturnedWorse 0
ReturnedSame 2
ReturnedBetter 1
Service2
ReturnedWorse 1
ReturnedSame 0
ReturnedBetter 1
Service3
ReturnedWorse 2
До сих пор я пытался создать запросы make table, которые затем можно было бы запрашивать для получения сводной информации, но я немного застрял и подозреваю, что может быть лучший маршрут.
Что я пробовал:
SELECT CustomerID, Service, Date, ScoreBefore INTO ReturnedWorse
FROM ServiceTable AS FirstStay
WHERE ((((SELECT COUNT(*)
FROM ServiceTable AS SecondStay
WHERE FirstStay.CustomerID=SecondStay.CustomerID
AND
FirstStay.ScoreBefore> SecondStay.ScoreBefore
AND
SecondStay.Date > FirstStay.Date))));
Любая помощь будет принята с благодарностью.