动态 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
考虑以下数据表。
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