【问题标题】:Dynamic SQL query which calculates the revenue generated for first X days since the onboarded Date动态 SQL 查询,计算自入职日期以来前 X 天产生的收入
【发布时间】:2021-12-10 15:58:00
【问题描述】:

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

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

2。收入表

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

【问题讨论】:

  • 按 customer_id 和 onboarded_date 和 onboarded_date 之间的日期加上期间长度加入,然后汇总?

标签: mysql sql dynamicquery


【解决方案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;

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

详情请见dbfiddle

【讨论】:

  • 感谢您的帮助,这很容易总结出所需的结果
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多