BugsBastard
Erfahrenes Mitglied
Hallo zusammen,
mein Problem ist eigentlich recht simpel. Ich habe eine Tabelle mit folgendem Schlüssel:
Produkt
Kunde
Datum
Weitere Werte:
Lagerbestand
Abverkauf
Wir erhalten jeden Tag, von manchen Kunden auch nur jede Woche, Abverkaufszahlen. Diese werden allerdings nicht für alle Produkte geliefert, sondern nur für Produkte bei denen auch Lagerbestand existiert bzw. auch Abverkauf vorhanden ist. Um das ganze noch ein bisschen interessanter zu machen, es kann auch sein, daß Daten von einem Tag fehlen, welche erst den nächsten Tag nachgeliefert werden.
Insgesamt reden wir von einem Datenaufkommen von mindestens 100 000 000 Datensätzen in der Db, jeden Tag kommen über 100 000 - 200 000 dazu.
Nun möchte ich den aktuellen Lagerbestand für alle Produkte in allen Geschäften herausfinden. Da ich nicht weiß, wann wir diesen aktuellen Lagerbestand erhalten haben, muß ich 4 Wochen in der Zeit zurückgehen. Meine aktuelle Query wäre demnach:
SELECT kunde, produkt, datum, lagerbestand FROM vertriebsdaten WHERE datum>=DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND datum=(SELECT max(datum) FROM vertriebsdaten as v WHERE v.kunde = kunde AND v.produkt = produkt AND datum>=DATE_SUB(CURDATE(), INTERVAL 30 DAY));
Diese Query ist aber bei der Anzahl der Datensätze (in der Tabelle und in der Rückgabe) sehr langsam. Gibt es bei Mysql noch eine schnellere Variante, bei der man den Maximumwert einer bestimmten Spalte mit den dazugehörigen Werten dieses Datensatzes erhält?
Gruss,
Bugs
mein Problem ist eigentlich recht simpel. Ich habe eine Tabelle mit folgendem Schlüssel:
Produkt
Kunde
Datum
Weitere Werte:
Lagerbestand
Abverkauf
Wir erhalten jeden Tag, von manchen Kunden auch nur jede Woche, Abverkaufszahlen. Diese werden allerdings nicht für alle Produkte geliefert, sondern nur für Produkte bei denen auch Lagerbestand existiert bzw. auch Abverkauf vorhanden ist. Um das ganze noch ein bisschen interessanter zu machen, es kann auch sein, daß Daten von einem Tag fehlen, welche erst den nächsten Tag nachgeliefert werden.
Insgesamt reden wir von einem Datenaufkommen von mindestens 100 000 000 Datensätzen in der Db, jeden Tag kommen über 100 000 - 200 000 dazu.
Nun möchte ich den aktuellen Lagerbestand für alle Produkte in allen Geschäften herausfinden. Da ich nicht weiß, wann wir diesen aktuellen Lagerbestand erhalten haben, muß ich 4 Wochen in der Zeit zurückgehen. Meine aktuelle Query wäre demnach:
SELECT kunde, produkt, datum, lagerbestand FROM vertriebsdaten WHERE datum>=DATE_SUB(CURDATE(), INTERVAL 30 DAY) AND datum=(SELECT max(datum) FROM vertriebsdaten as v WHERE v.kunde = kunde AND v.produkt = produkt AND datum>=DATE_SUB(CURDATE(), INTERVAL 30 DAY));
Diese Query ist aber bei der Anzahl der Datensätze (in der Tabelle und in der Rückgabe) sehr langsam. Gibt es bei Mysql noch eine schnellere Variante, bei der man den Maximumwert einer bestimmten Spalte mit den dazugehörigen Werten dieses Datensatzes erhält?
Gruss,
Bugs