Ha aber deins wird nicht funktionieren
Hier nämlich greifst du nicht mehr auf die ursprüngliche Artikel-Tabelle zu:
AND p.Datum = MAX(SELECT p.Datum from artikel AS a, preise AS p where p.artikel = a.ID and p.Datum <= '01.01.2006')
Du suchst damit nämlich einfach nur das maximale datum für alle Artikel raus und nicht für dein einen