【发布时间】:2020-03-16 06:35:28
【问题描述】:
在 MYSQL v5 中,我想根据最新订单日期、订单之间的平均日期间隔(天)和平均订单价值创建每个客户 (CUSTID) 的线性预测,所有这些我已经按 CUSTID 查询过.
因此,我希望使用列 CUSTID、平均订单价值、该客户的最新订单日期和最大日期之间的每个日期的订单日期创建一条记录,比如说“2019-12-31”。
基于堆栈上有些类似的问题,我尝试了一个存储过程中的 while 循环(如下),但我很难获得任何有意义的输出,尽管我认为我离正确的道路不远。很感谢任何形式的帮助。
Input Data sample
+--------+------------+-------------+------------+
| CUSTID | LatestDate | AvgInterval | OrderValue |
+--------+------------+-------------+------------+
| 1001 | 01/11/2019 | 15 | 400.00 |
| 1002 | 17/10/2019 | 8 | 250.00 |
| 1003 | 04/11/2019 | 7 | 500.00 |
+--------+------------+-------------+------------+
Expected output table
+--------+------------+------------+
| CUSTID | Date | OrderValue |
+--------+------------+------------+
| 1001 | 16/11/2019 | 400.00 |
| 1001 | 01/12/2019 | 400.00 |
| 1001 | 16/12/2019 | 400.00 |
| 1001 | 31/12/2019 | 400.00 |
| 2002 | 29/10/2019 | 250.00 |
| 2002 | 10/11/2019 | 250.00 |
| 2002 | 22/11/2019 | 250.00 |
| 2002 | 04/12/2019 | 250.00 |
| 2002 | 16/12/2019 | 250.00 |
| 2002 | 28/12/2019 | 250.00 |
| 3003 | 13/11/2019 | 500.00 |
| 3003 | 22/11/2019 | 500.00 |
| 3003 | 01/12/2019 | 500.00 |
| 3003 | 10/12/2019 | 500.00 |
| 3003 | 19/12/2019 | 500.00 |
| 3003 | 28/12/2019 | 500.00 |
+--------+------------+------------+
The while loop I attempted to use for this:
while
(select max('Date') from OutputTable) <= '2019-12-31'
do
insert into OutputTable
(select
ip.CUSTID,
date_add(
max(
ip.LatestDate,
max(op.'Date')
),
interval ip.AvgInterval DAY
) as 'Date',
ip.OrderValue
from
InputTable ip,
OutputTable ou
)
end while
【问题讨论】:
-
考虑处理应用代码中数据显示的问题
标签: mysql stored-procedures while-loop sql-insert