2015-11-29 157 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值的错误) –