2016-06-10 117 views
0

我有兩個表。MySQL:將表字段連接到相關的結果集

在 '參數' 表(下文)跟蹤參數附加到各種部件:

action_date | parameter (fk) | value | notes 

I:

id (pk) | name | component 

在 'parameterLog' 表跨越時間跟蹤的參數的值具有以下結果集:

SELECT * FROM parameters WHERE component = 1; 
+----+------+-----------+ 
| id | name | component | 
+----+------+-----------+ 
| 1 | par1 |   1 | 
| 2 | par2 |   1 | 
+----+------+-----------+ 

對於上述結果集中的每個條目,我需要'parameterLog'表中相應的和最近的action_date,value和note。

[編輯] 爲了清楚起見,我將下面的數據包括在內。

parameters: 
+----+------+-----------+ 
| id | name | component | 
+----+------+-----------+ 
| 1 | par1 |   1 | 
| 2 | par2 |   1 | 
| 3 | par1 |   2 | 
| 4 | par2 |   2 | 
| 5 | par1 |   3 | 
| 6 | par2 |   3 | 
| 7 | par3 |   3 | 
| 8 | par1 |   4 | 
| 9 | par2 |   4 | 
| 10 | par1 |   6 | 
| 11 | par2 |   6 | 
+----+------+-----------+ 

parameterLog: 
+-------------+-----------+-------+-------+ 
| action_date | parameter | value | notes | 
+-------------+-----------+-------+-------+ 
| 2010-01-01 |   1 | 0  | NULL | 
| 2010-02-03 |   1 | 4  | NULL | 
| 2010-01-01 |   2 | 0  | NULL | 
| 2010-01-01 |   3 | 1  | NULL | 
| 2010-01-01 |   4 | 1  | NULL | 
| 2010-01-14 |   5 | 0  | NULL | 
| 2010-01-14 |   6 | 1  | NULL | 
| 2010-01-14 |   7 | 2  | NULL | 
| 2010-01-14 |   8 | 3  | NULL | 
| 2010-02-03 |   8 | 1  | NULL | 
| 2010-01-14 |   9 | 4  | NULL | 
| 2010-02-03 |   9 | 1  | NULL | 
| 2010-02-25 |  10 | 9  | NULL | 
| 2010-02-25 |  11 | 9  | NULL | 
+-------------+-----------+-------+-------+ 

回答

0
SELECT param.*, 
     plog.action_date, 
     plog.value, 
     plog.notes 
FROM parameters param,parameter_log plog 
WHERE param.id=plog.parameter 
     and action_date = (select max(action_date) 
         from parameterLog 
         where parameter = param.id) 
     and component = 1; 
+0

感謝您的答覆!這爲我提供了正確的字段,但包含了以前參數值的條目(例如,par1出現在表格中兩次,一次是舊值,一次是當前值)。 – user6431631

+0

是否可以有多個具有相同參數和完全相同action_date的日誌記錄? –

+0

不。後者的值會覆蓋之前的值。 – user6431631