Jag har två tabeller
---------------------------------------
En produkttabell TabellA (i verkligheten avsevärt många fler kolumner)
Kod:
select * from TabellA
+----+-------+
| Id | Namn |
+----+-------+
| 1 | Saab |
| 2 | Volvo |
| 3 | Audi |
| 4 | Lexus |
+----+-------+
och en TabellB med priser
Kod:
select * from TabellB
+----+-----+------+------------+
| Id | PId | Pris | Datum |
+----+-----+------+------------+
| 1 | 1 | 500 | 2011-12-21 |
| 2 | 2 | 600 | 2011-12-21 |
| 3 | 3 | 1000 | 2011-12-07 |
| 4 | 3 | 1800 | 2011-12-13 |
| 5 | 3 | 1500 | 2011-12-18 |
| 6 | 4 | 320 | 0201-12-01 |
+----+-----+------+------------+
Priserna förändras över tid och jag vill spara all historik.
Här kan vi se att priset på produkt ändrats tre gånger i dec
Kod:
select PId,Namn,Pris,Datum from TabellA
left join TabellB on TabellB.PId = TabellA.Id
+------+-------+------+------------+
| PId | Namn | Pris | Datum |
+------+-------+------+------------+
| 1 | Saab | 500 | 2011-12-21 |
| 2 | Volvo | 600 | 2011-12-21 |
| 3 | Audi | 1000 | 2011-12-07 |
| 3 | Audi | 1800 | 2011-12-13 |
| 3 | Audi | 1500 | 2011-12-18 |
| 4 | Lexus | 320 | 0201-12-01 |
+------+-------+------+------------+
Kod:
select PId,Namn,Pris,Datum from TabellA left
join TabellB on TabellB.PId = TabellA.Id
group by PId;
+------+-------+------+------------+
| PId | Namn | Pris | Datum |
+------+-------+------+------------+
| 1 | Saab | 500 | 2011-12-21 |
| 2 | Volvo | 600 | 2011-12-21 |
| 3 | Audi | 1000 | 2011-12-07 |
| 4 | Lexus | 320 | 0201-12-01 |
+------+-------+------+------------+
Vad skriver jag för att det alltid ska välja senast pris? Alltså ett sånt här resultat.
Kod:
+------+-------+------+------------+
| PId | Namn | Pris | Datum |
+------+-------+------+------------+
| 1 | Saab | 500 | 2011-12-21 |
| 2 | Volvo | 600 | 2011-12-21 |
| 3 | Audi | 1500 | 2011-12-18 | <-- detta
| 4 | Lexus | 320 | 0201-12-01 |
+------+-------+------+------------+