Ich bin mir nicht sicher, ob das Folgende mit einer bloßen SELECT-Anweisung erledigt werden kann, aber ich habe zwei Tabellen (abgeschnitten mit den für das Problem notwendigen Daten).
Inventarelement
Bestand - Enthält Änderungen im Bestand des Lagerbestands (Bestandsverlauf)
Die Menge auf Lager ist die Bestandsänderung, während die Menge in der Inventarposition die aktuelle Menge dieses Artikels ist
ALLES IN% running
COLUMN RÜCKKEHR 0
DIE FRAGE
Nun möchte ich Folgendes wissen: Ist es möglich, alle Daten in der Bestandstabelle auszuwählen, in denen die laufende Menge des inventory_item jemals Null wird, indem ein SELECT?
verwendet wirdIch weiß, dass dies programmgesteuert erfolgen kann, indem einfach alle Bestandsdaten in einer Position ausgewählt werden und die Bestandsmenge von der aktuellen Bestandsartikelmenge, die die Menge vor der Bestandsänderung erhält, einzeln subtrahiert wird. Kann ich dies mit einem SELECT tun?
Ich nehme es an:
%Vor%Dieser hat den relativen Vorteil, dass er nur einen Durchlauf an die Lagerliste geben muss. Abhängig von der Größe und den Indizes darauf, die eine gute Sache sein können oder nicht.
(Aktualisiert) Angenommen, es wird nie mehr als einen Datensatz für eine gegebene Kombination aus inventory_item_id und erstellt geben, versuchen Sie:
%Vor%Der logischste Weg ist eine kumulative Summe. Aber MySQL unterstützt das nicht.
Der klarste Ansatz ist meiner Meinung nach, eine korrelierte Unterabfrage zu verwenden, um die laufende Menge zu erhalten. Dann ist es eine einfache Sache einer where
-Klausel, wo sie 0
ist:
Ich hatte eine ähnliche Antwort basierend auf einer laufenden Summe, die gekennzeichnet werden sollte hier gefunden ...
Sie können MySQL @ variables verwenden, aber die Daten müssen vorher abgefragt und nach den Daten der Aktivität sortiert werden ... dann setzen Sie ein Flag in jeder Zeile, die das Negative verursacht, und behalten nur diese. Etwas wie
%Vor%Auf diese Weise wird für jedes Inventarelement nach dem Erstellungsdatum rückwärts gearbeitet (Reihenfolge nach dem erstellten Absteigen pro ID). Wenn sich also die Inventar-ID ändert, sehen Sie im Feld "Menge" der Inventurtabelle nach, um die Anzahl der verwendeten Bestände zu erhöhen. Wenn dieselbe ID wie der letzte verarbeitete Datensatz verwendet wird, verwenden Sie einfach den laufenden Saldo und subtrahieren Sie die Menge dieses Bestandseintrags.
Tags und Links mysql