2017-08-17 33 views
2

之間存在的記錄,我目前寫了返回查詢以下查詢創建不2點

+-----------+--------+--------+ 
| 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 | 
+-----------+--------+--------+ 

請注意,我有超過1的客戶端ID現在,我的本意只是爲了完成最小和最大週期之間的任何空白,我有本作的數據CLIENT_ID。 此外,每個客戶的期限因客戶而異。例如客戶端1可以有一個最大週期6和客戶端2的最大週期8.

有沒有人知道這樣做的方式?

我遇到了以下問題,除了我的情況,我覺得我需要編寫一個循環遍歷不同的client_id嗎? Example I found

+0

也許,如果你可以'創建臨時TABLES',並建立一個表的所有可能的時間,然後做智能'JOIN'或'UNION'東西有些親切。但聲音難以對我 – RealCheeseLord

回答

2

一個典型的解決方案是定義一個包含所有句點的源表(table),並將查詢添加到表中。

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 
+0

這不會把前一行的值作爲未知時期的狀態,雖然 – RealCheeseLord

+1

@RealCheeseLord我更新了答案。如果一段時間缺失,不知道從哪裏獲得狀態 – StanislavL