Problem mit MySQL-Abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit MySQL-Abfrage

    Hallöchen,

    habe mal wieder ein Problem mit einer Abfrage und viellicht könnt ihr mir helfen.

    Szenario:
    Ich habe eine Tabelle Produkte, die zwischen 2004 und 2009 gekauft worden sind.

    Aufbau:

    pid | name | ustlgid (Umsatzsteuerleistungsgruppe) | ...
    1 | Holz | 2
    2 | Staub | 2

    Produkte werden bei mir eingekauft und in der Tabelle Einkauf gespeichert

    Aufbau:
    eid | pid | datum
    1 | 1 | 2005-09-09
    2 | 2 | 2009-09-09

    Wenn die Güter verbraucht werden, habe ich eine Übersicht mit jeweiligen Bruttopreisen. Bis dato hatte ich immer eine PHP Funktion Ust() um mir die entsprechende Umsatzsteuer 7%, 16% oder 19% zu beschaffen. Diese ist jedoch ziehmlich unkomfortabel und langsam. Aus diesen Grund habe ich bereits eine Reihe mit reinen SQL Query's gelöst und was Performance angeht eine erhebliche Steigerung verzeichnen können. Nur jetzt hab ich meine Probleme mit der Umsatzsteuer. Ich habe eine Tabelle Umsatzsteuer.

    Aufbau:

    ustid | ustlgid | satz | datum
    1 | 1 | 0.07 | 0000-00-00
    2 | 2 | 0.16 | 0000-00-00
    3 | 2 | 0.19 | 2007-01-01

    Meine Abfrage benötigt Daten aus allen 3 Tabellen (später sogar noch mehr). Mein Problem auf das ich stoße ist die Abfrage des Umsatzsteuersatzes anhand des Datums aus dem Einkauf.

    Mein bisheriger Ansatz:

    SELECT einkauf.eid, einkauf.datum, produkt.pid, produkt.name, ust.satz, MAX(ust.datum)
    FROM einkauf
    LEFT JOIN produkt ON produkt.pid = einkauf.pid
    LEFT JOIN umsatzsteuer As ust ON ust.ustlgid = produkt.ustlgid
    GROUP BY eid

    Was ich benötige ist der richtige Datensatz aus Umsatzsteuer und das funktioniert nicht. Basiert die Lösung vllt auf Subqueries? Ich benötige auf jeden Fall eine möglichst performante Lösung.

    Das Ergebnis soll dann soll dann so aussehen:

    eid | eid.datum | pid | pid.name | ust.satz
    1 | 2005-09-09 | 1 | Holz | 0.16
    2 | 2009-09-09 | 2 | Staub | 0.19

    Wäre schön, wenn mir jemand helfen könnte
    Zuletzt geändert von dumdumdum; 14.09.2009, 17:08.

  • #2
    Hallo,

    probier mal

    Code:
    SELECT einkauf.eid, einkauf.datum, produkt.pid, produkt.name,  ust.satz
    FROM einkauf
    LEFT  JOIN produkt ON produkt.pid = einkauf.pid
    LEFT  JOIN umsatzsteuer As ust ON ust.ustlgid = produkt.ustlgid
    left join umsatzsteuer as ust2 on (ust.datum < ust2.datum and ust2.datum <= einkauf.datum) or ust.datum > einkauf.datum
    where ust2.ustid is null
    (ungetestet)

    Edit: hab das was du im Edit geschrieben hast noch nicht berücksichtigen können, daher funzt die o. g. Lösung nicht
    Edit2: Abfrage an dein Edit angepasst, müsste jetzt gehen
    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 14.09.2009, 18:17.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar

    Lädt...
    X