动态 SQL 查询,计算自入职日期以来前 X 天产生的收入

Dynamic SQL query which calculates the revenue generated for first X days since the onboarded Date

考虑以下数据表。
1。客户 Table

id name onboarded_date
1 xxxx 2021-10-01
2 yyyy 2021-10-02
3 zzzz 2021-10-05

2。收入 Table

id customer_id date revenue
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 name start_date end_date total_revenue
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

您可以使用带有参数的动态查询来代替动态查询。

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;

在您的代码中,您只需将“DAYS”替换为一些绑定参数即可。

详情见dbfiddle