Vinzenz Mai: komplizierte(?) MySql-Abfrage

Beitrag lesen

Hallo Tobias,

ich hoffe ich krieg das halbwegs verständlich erklärt was ich will. Vielleicht erstmal ne Beispieltabelle:

das ist eine hervorragende Idee. Eine schöne Problembeschreibung.

Datum   | Produkt | Arbeitschritt | Erfolg

01.01.09|    X    |      A        | yes
02.01.09|    X    |      B        | yes
01.01.09|    Y    |      A        | no
02.01.09|    Y    |      A        | yes
03.01.09|    Y    |      B        | yes
02.01.09|    Z    |      A        | yes

So, und nun hätte ich ganz gerne alle erfolgreichen Arbeitschritte 'A' mit Datum und Produktnamen, bei denen Arbeitsschritt 'B' bereits erfolgreich war. Die Produktnamen sind mir im Vorfeld nicht bekannt.

Ich gehe davon aus, dass ein Produkt nur einmal den gleichen Arbeitsschritt mit Erfolg "yes" durchläuft. Wenn dies nicht der Fall ist, dann müsstest Du erläutern, welchen dieser Datensätze Du haben möchtest.

Die Ausgabe sollte also nach meinen Vorstellungen so aus sehen:

Datum   | Produkt

01.01.09|    X
02.01.09|    Y

Hat jemand einen Vorschlag für mich?

Ich hätte gleich zwei:

1. Du sagst:
Gib mir
    das Datum, an dem
    ein Produkt
aus
    meiner Tabelle
den Arbeitsschritt A
    erfolgreich durchlaufen hat
und das in der Liste der Produkte steht, die
    den Arbeitsschritt B
    bereits erfolgreich durchlaufen haben.

Setzen wir das in SQL um:

SELECT                            -- Gib mir  
    Datum,                        -- das Datum, an dem  
    Produkt                       -- das Produkt  
FROM                              -- aus  
    Tabelle                       -- meiner Tabelle  
WHERE  
    Arbeitsschritt = 'A'          -- den Arbeitsschritt A  
AND  
    erfolg = 'yes'                -- erfolgreich durchlaufen hat  
AND                               -- wobei mich nur solche  
    Produkt IN (                  -- Produkte interessieren  
        SELECT                    -- die in der Liste  
            Produkt               -- der Produkte stehen  
        FROM  
            Tabelle  
        WHERE                     -- die  
            Arbeitsschritt = 'B'  -- den Arbeitsschritt B  
        AND  
            erfolg = 'yes'        -- erfolgreich durchlaufen haben.  
    )  

Subselects unterstützt MySQL ab Version 4.1, und diese Version sollte Dir Dein Hoster auf jeden Fall zur Verfügung stellen, besser noch eine 5er-Version.

Alternativ könntest Du Dein Problem mit einem Selfjoin lösen, wie es Axel beschrieben hat.

Freundliche Grüße

Vinzenz