我目前已经编写了一个查询,它返回以下内容
+-----------+--------+--------+
| client_id | Period | Status |
+-----------+--------+--------+
| 2378 | 1 | Paid |
| 2378 | 2 | Paid |
| 2378 | 4 | Paid |
| 2378 | 5 | Paid |
| 2378 | 6 | Frozen |
| 2378 | 10 | Paid |
+-----------+--------+--------+但是,我希望它包含我没有任何数据的时间段。例如,周期3和周期7-9。通过填写上一期发生的内容。例如,期间3将成为支付。如下所示:
+-----------+--------+--------+
| client_id | Period | Status |
+-----------+--------+--------+
| 2378 | 1 | Paid |
| 2378 | 2 | Paid |
| 2378 | 3 | Paid |
| 2378 | 4 | Paid |
| 2378 | 5 | Paid |
| 2378 | 6 | Frozen |
| 2378 | 7 | Frozen |
| 2378 | 8 | Frozen |
| 2378 | 9 | Frozen |
| 2378 | 10 | Paid |
+-----------+--------+--------+请注意,我确实有多个客户端ID,我的目的只是填充数据中为该Client_Id提供的最小和最大时间段之间的任何空白。此外,每个客户端的周期也因客户端而异。例如,客户端1的最大周期可以是6,客户端2的最大周期可以是8。
有没有人知道可以做到这一点的方法?
我遇到了以下问题,除了我的情况之外,它有点类似。我觉得我需要在不同的client_id的?Example I found上编写一个循环。
发布于 2017-08-17 16:03:08
典型的解决方案是定义一个包含所有句点的源(表),并将查询连接到表中。
select
ap.Period,
case when q.Status is not null then q.Status else @prevStatus end as status,
@prevStatus:=q.Status
from all_periods ap
left join (your query here) q on ap.Period = q.Period,
(select @prevStatus:='undefined') sesshttps://stackoverflow.com/questions/45729408
复制相似问题