2015-08-28 106 views
1

我很難搞清楚如何提出這個問題。我有兩個表格,一個是註冊表時間的「訂單」列表,另一個是「活動」表格,我有一個這些訂單製作過程的時間的註冊表。選擇動態列Mysql

我沒有得到如何做的是接下來的事情,我需要能夠確定一個查詢自上一個過程以來每個訂單的時間量。

表:Ordenes

| Id | Numero | flujo_id | LastOrder |   FechaRegistro | 
|----|--------|----------|-----------|--------------------------| 
| 1 | 111 |  1 |   0 | August, 13 2015 13:25:00 | 
| 2 | 222 |  1 |   2 | August, 13 2015 13:25:00 | 
| 3 | 333 |  1 |   4 | August, 13 2015 13:25:00 | 
| 4 | 444 |  1 |   3 | August, 13 2015 13:25:00 | 

表:ACTIVIDAD

| Id |    TiempoInicio | TiempoFin | Proceso_Id | Orden_Id | 
|----|--------------------------|-----------|------------|----------| 
| 7 | August, 13 2015 13:30:00 | (null) |   1 |  2 | 
| 8 | August, 13 2015 13:50:00 | (null) |   2 |  2 | 
| 9 | August, 13 2015 13:30:00 | (null) |   1 |  3 | 
| 10 | August, 13 2015 13:50:00 | (null) |   2 |  3 | 
| 11 | August, 13 2015 14:20:00 | (null) |   3 |  3 | 
| 12 | August, 13 2015 14:25:00 | (null) |   4 |  3 | 
| 13 | August, 13 2015 13:30:00 | (null) |   1 |  4 | 
| 14 | August, 13 2015 13:50:00 | (null) |   2 |  4 | 
| 15 | August, 13 2015 14:20:00 | (null) |   3 |  4 | 

表:Procesos

| Id | Estacion_Id |            Nombre |     TiempoStd | 
|----|-------------|----------------------------------------------------|---------------------------| 
| 1 |   1 |  Informacion <br/>tecnica para <br/>aprobacion | January, 01 1970 00:02:00 | 
| 2 |   2 | Aprobacion de<br/> Informacion<br/>Tecnica cliente | January, 01 1970 00:24:00 | 
| 3 |   3 |    Informacion<br/>Tecnica de<br/>Proceso | January, 01 1970 00:04:00 | 
| 4 |   4 |   Compra y<br/>Recepcion de<br/>Materiales | January, 01 1970 02:00:00 | 

的預期輸出。

| Id | Numero |   FechaRegistro | P1 | P2 | P3 | P4 | 
|----|--------|--------------------------|--------|--------|--------|--------| 
| 1 | 111 | August, 13 2015 13:25:00 | (null) | (null) | (null) | (null) | 
| 2 | 222 | August, 13 2015 13:25:00 | 5:00 | 20:00 | (null) | (null) | 
| 3 | 333 | August, 13 2015 13:25:00 | 5:00 | 20:00 | 30:00 | 5:00 | 
| 4 | 444 | August, 13 2015 13:25:00 | 5:00 | 20:00 | 30:00 | (null) | 

什麼我不知道該怎麼做是能夠做到動態調用,這樣我會得到P1,P2,P3,直到光合速率列N =上「Procesos」表中的行數。而對於時間計算我確實有一個想法,但因爲我不知道如何得到這些列我不能嘗試它。

這是一張裝載表格的小提琴。 HERE

+0

小提琴不起作用繼續它可能是有用的 - 或鏈接不反正 – RamRaider

+0

@RamRaider我剛剛試了一下,確實如此,你可以重新嘗試? –

+0

好吧,這是無腳印阻止鏈接 - 我的道歉..鉻在開放罰款! – RamRaider

回答

2

我想出了下面的東西。它可能看起來不太模糊。

select ordenes.Id,Numero,FechaRegistro,m.p1,a.p2,b.p3,c.p4 from Ordenes 
left join (select ordenes.id, 
       TIMESTAMPDIFF(MINUTE,Ordenes.FechaRegistro,min(Actividad.TiempoInicio)) P1 
      from Ordenes 
      left join Actividad on ordenes.id=Actividad.orden_id 
      group by Actividad.orden_id) as m on ordenes.id=m.id 
left join (select Orden_Id,TIMESTAMPDIFF(MINUTE,min(TiempoInicio),max(TiempoInicio)) P2 
      from actividad 
      where Proceso_Id in ('1','2') 
      group by orden_id) as a on ordenes.id=a.orden_id 
left join 
(select Orden_Id,TIMESTAMPDIFF(MINUTE,min(TiempoInicio),max(TiempoInicio)) P3 
     from actividad 
     where Proceso_Id in ('2','3') 
     group by orden_id) as b on ordenes.id=b.orden_id 
left join 
(select Orden_Id,TIMESTAMPDIFF(MINUTE,min(TiempoInicio),max(TiempoInicio)) P4 
     from actividad 
     where Proceso_Id in ('3','4') 
     group by orden_id) as c on ordenes.id=c.orden_id 
order by id; 

輸出我得到

| Id | Numero |   FechaRegistro | P1 | P2 | P3 | P4 | 
|----|--------|--------------------------|--------|--------|--------|--------| 
| 1 | 111 | August, 13 2015 13:25:00 | (null) | (null) | (null) | (null) | 
| 2 | 222 | August, 13 2015 13:25:00 | 5  | 20  | 0  | (null) | 
| 3 | 333 | August, 13 2015 13:25:00 | 5  | 20  | 30  | 5  | 
| 4 | 444 | August, 13 2015 13:25:00 | 5  | 20  | 30  | 0  | 

不符合所有要求。但ATLEAST作爲參考,以進一步

DEMO Fiddle

+0

Thx的嘗試,但即時通訊仍然與我的主要問題是dtnamic部分,如果存儲差異已經會更容易得到這動態?所以儲存了5分鐘,20分鐘等等? –

+0

男人,即時通訊試圖瞭解你的查詢如何解決問題,我真的不明白爲什麼我會得到一些0而不是null在id 2和4,你碰巧知道如何解釋給我? –

+0

Sry我很忙。 '0'即將到來,因爲在這種情況下'Min'和'max'將是同一日期。所以'選擇TIMESTAMPDIFF(MINUTE,'2015-08-13 13:30:00','2015-08-13 13:30:00');'會給'0'。 – Crazy2crack