我目前编写了一个返回以下内容的查询
+-----------+--------+--------+
| 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
答案 0 :(得分:2)
一个典型的解决方案是定义一个包含所有句点的源(表),然后将查询连接到表中。
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') sess