2016-06-10 5 views
0

Ich habe zwei Tabellen.MySQL: Join Tabellenfelder zu verwandten Ergebnissatz

Die Tabelle 'Parameter' (unten) verfolgt Parameter an verschiedene Komponenten befestigt:

id (pk) | name | component 

den Tisch 'parameterLog', um die Werte eines Parameters über die Zeit verfolgt:

action_date | parameter (fk) | value | notes 

I folgendes Ergebnis haben:

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

Für jeden Eintrag im obigen Ergebnissatz Ich benötige das entsprechende und letzte action_date, value und note aus der Tabelle 'parameterLog'.

[Bearbeiten] Aus Gründen der Übersichtlichkeit schließe ich die Tabellen mit Daten unten ein.

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

Antwort

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

Vielen Dank für Ihre Antwort! Dies gibt mir die richtigen Felder, enthält jedoch Einträge aus früheren Parameterwerten (z. B. erscheint par1 zweimal in der Tabelle, einmal mit seinem alten Wert und einmal mit seinem aktuellen Wert). – user6431631

+0

Kann es mehrere Protokolldatensätze mit demselben Parameter und genau demselben action_date geben? –

+0

Nein. Der letztere Wert würde den vorherigen überschreiben. – user6431631