2015-11-29 109 views
1

假設我們有一個MySQL表所示:MySQL的:需要一個查詢

id parent_id date_created previous_status next_status 

此表顯示PARENT_ID面臨在DATE_CREATED日期的狀態變化。 如何創建一個視圖或簡單的查詢,以顯示每個父母在每個時間段的狀態。例如:

id parent_id date_created previous_status next_status 
1 1   2015-10-11  new    old 
2 1   2015-10-12  old    med 
3 1   2015-10-13  med    new 
... 
... 
... 

結果

parent_id status from_date to_date 
1   new null  2015-10-11 
1   old 2015-10-11 2015-10-12 
1   med 2015-10-12 2015-10-13 
1   new 2015-10-13 null 
... 
... 
... 

這是一個示例數據庫表:獲得下一個狀態Sample audit table

+0

難道您只是存儲當前狀態!?!?!?! – Strawberry

回答

2

一種方法是使用相關子查詢。然後,查詢的另一個組件獲取初始狀態,這表明union all

select distinct pid, previous_status as status, null as from_date, date_created as to_date 
from t 
union all 
select pid, next_status, date_created as from_date, 
     (select date_created 
     from t t2 
     where t2.pid = t.pid and t2.date_created > t.date_created 
     order by t2.date_created desc 
     limit 1 
     ) as to_date 
from t; 
+0

你可以用from_date和to_date編輯你的答案嗎? – HPM

+0

仍然對所有from_date – HPM

+0

@HPM顯示爲空。 。 。你確定你正在使用't2.pid = t.pid'這個條件嗎?你想在那裏使用父ID,而不是行ID。 ('asc'與'desc'是另一個不會導致NULL值的錯誤) –