Ich empfehle
Subqueries
grundsätzlich zu vermeiden, da diese in gewissen Fällen von der Datenbank nicht optimiert werden und dann zu sehr langen Ausführzeiten führen können.
Wann immer es geht entweder mit Joins arbeiten oder/und statt dessen
Derived Tables verwenden.
Letzteres wird wahrscheinlich auch in deinem Fall das SQL an sich am übersichtlichsten halten.
Ich hab jetzt nicht den Überblick, was jetzt am Ende deine genauen Anforderungen sind, deswegen hier ein Beispiel anhand deines SQLs im Eingangspost:
SQL:
select id, datum, sum(summe)
from (select v.id id, v.price summe, t.datum datum
from table_1 v join table_2 t on v.id = t.id
where t.datum >= '...' and t.datum < '...'
group by v.id, t.datum, v.price)
group by id, datum
Ergänzung:
Distinct
ist nicht immer das, was es scheint.
Je nach DBMS und Formulierung, bzw. Strukturierung des SQLs wird dabei im Hintergrund nichts anderes gemacht, als ein
Group By
auf alle nicht aggregierten Spalten.
Ich empfehle deswegen auch einen großen Bogen um
Distinct
zu machen.
Meistens hat man sowieso einen Denkfehler oder einen Schritt ausgelassen, wenn man 5 oder mehr (Ausnahmen bestätigen die Regel) Spalten in sein
Group By
packen muss.
Außerdem lassen sich auf diese Weise auch Arten von Nutzdaten mit einem
Group By
"verwenden", die nicht gruppierbar sind. (z.B. BLOBs & Co.)
In den allermeisten Fällen, die mir untergekommen sind, waren dann auch da Derived Tables mit dem Selektieren entsprechender Primary und Foreign Keys und anschließendes Joinen der Nutzdaten-Tabellen auf die Derived Table die sinnvollere Lösung.