Ik zit met een SQL uitdaging waar ik zelf en enkele vrienden niet meer uitkomen.
Ik heb een 2-tal tabellen, namelijk producten, prijzen.
Ik ben opzoek naar de geldende prijs op een bepaalde datum. Dit kan ik bepalen door de prijs ingegaan op de datum van de laatste prijswijziging voor de gewenste datum op te zoeken.
Voorbeeld: Product 1001 heeft Sinds 1-1-2007 een prijs van 12,18 euro, per 1-3-2007 is de prijs verlaagd naar 9,75 euro.
Wanneer ik de tabellen koppel dan krijg ik alle in de geschiedenis geldende prijzen.
Een limit 1 is geen optie, dit omdat het aantal producten en verschillende prijzen onbekend is bij het aanroepen van de query.
Bron tabellen:
Prijzen:
Producten:Code:+---------+-----------+-------+------------+------------+ | PrijsID | ProductID | Prijs | Datum | BTWGroepID | +---------+-----------+-------+------------+------------+ | 1 | 1001 | 12.18 | 2007-01-01 | 1 | | 2 | 1001 | 9.75 | 2007-03-01 | 1 | | 3 | 1002 | 12.18 | 2007-01-01 | 1 | | 4 | 1002 | 10.00 | 2007-03-22 | 1 | | 5 | 1001 | 12.18 | 2007-03-26 | 1 | +---------+-----------+-------+------------+------------+
SQL:Code:+-----------+----------------------------------+ | ProductID | Naam | +-----------+----------------------------------+ | 1001 | Product 1001 | | 1002 | Product 1002 | +-----------+----------------------------------+
Resultaat:Code:select PRODUCTEN.ProductID, Datum, Prijs from PRODUCTEN left outer join PRIJZEN as PRIJZEN on PRODUCTEN.ProductID=PRIJZEN.ProductID where PRIJZEN.Datum < '2007-03-25' GROUP BY Datum, ProductID, Naam, Prijs ORDER BY Datum Desc;
Code:+-----------+------------+-------+ | ProductID | Datum | Prijs | +-----------+------------+-------+ | 1002 | 2007-03-22 | 10.00 | | 1001 | 2007-03-01 | 9.75 | | 1001 | 2007-01-01 | 12.18 | | 1002 | 2007-01-01 | 12.18 | +-----------+------------+-------+
Het gene dat ik wil bereiken is eigenlijk het volgende:
Kortom elk product maximaal 1 keer tonen, met de meest recente datum, en de daar bij behorende prijs.Code:+-----------+------------+-------+ | ProductID | Datum | Prijs | +-----------+------------+-------+ | 1001 | 2007-03-01 | 9.75 | | 1002 | 2007-03-22 | 10.00 | +-----------+------------+-------+