Динамический SQL-запрос, который вычисляет доход, полученный за первые X дней с момента ввода даты

#mysql #sql #dynamicquery

Вопрос:

Рассмотрим следующие таблицы данных.
1. Таблица клиентов

ID Имя onboarded_date дата загрузки
1 xxxx 2021-10-01
2 yyyy 2021-10-02
3 zzzz 2021-10-05

2. Таблица доходов

ID customer_id пользователь_id Дата выручка
1 1 2021-10-01 100
1 2 2021-10-02 300
3 2 2021-10-03 200
4 3 2021-10-07 100
5 2 2021-10-10 100
6 3 2021-10-12 300
7 3 2021-10-14 600

Как мы можем написать единый динамический запрос, который вычисляет для каждого клиента доход, полученный за первые 10 дней с даты ввода (учитывая дату ввода в качестве даты начала)

Примечание: Дата начала и дата окончания для каждого клиента для расчета общего дохода здесь являются динамическими

Ожидаемый результат:

ID Имя start_date конечная дата итоговый доход
1 xxxx 2021-10-01 2021-10-10 100
2 yyyy 2021-10-02 2021-10-11 600
3 zzzz 2021-10-05 2021-10-14 1000

Комментарии:

1. Объединение по идентификатору клиента и дате между onboarded_date и onboarded_date плюс длина периода, затем агрегировать?

Ответ №1:

Вместо динамического запроса вы можете использовать запрос с параметром.

 select c.id,
       c.name,
       c.onboard_date start_date,
       date_format(c.onboard_date   DAYS, '%Y-%m-%d') end_date,
       sum(revenue) revenue
  from customers c
  join revenue r
    on r.customer_id = c.id
 where r.date between c.onboard_date and c.onboard_date   DAYS
 group by c.id,
       c.name,
       c.onboard_date;
 

В вашем коде вы можете просто заменить «ДНИ» некоторым параметром привязки.

Подробности см. в dbfiddle

Комментарии:

1. Спасибо за помощь, это легко обобщает необходимый результат