none
Abhängige Maximalwerte ermitteln

    Frage

  • Hallo,

    ich will für eine Versionsverwaltung die letzten Versionen in einem Listenfeld anzeigen. Die zugrundeliegende Tabelle hat folgenden Aufbau:

    lngVersionID lngSOPID lngVersion lngDraft
    1                 1             1              0
    2                 3             1              0
    3                 1             2              1
    4                 1             2              2
    5                 3             2              1
    6                 3             3              0
    7                 1             3              1
    8                 1             2              3

    Wenn eine Version final ist, steht im Feld Draft eine 0, sonst werden sie Versionen hochgezählt.
    In meinem Listenfeld sollte dann zu sehen sein:

    SOPID   V  D
    1          3  1
    3          3  0

    Mit
    SELECT lngSOPID, Max(lngVersion) AS L, Max(lngDraft) AS D FROM tblSOPVersion GROUP BY lngSOPID
    wir mir unter D für die SOPID 1 natürlich die 2 ausgegeben.

    Ich suche also nach einer Möglichkeit, zuerst den Maximalwert von Version und dann in Abhängigkeit von diesen DS den Maximalwert von Draft pro Version zu ermitteln.
    Geht das mit SQL oder muss ich mir da eine andere Lösung suchen?

    Danke schonmal
    Maik

    Freitag, 17. Juni 2011 13:20

Antworten

  • Maik Hahmann wrote:
    > ich will für eine Versionsverwaltung die letzten Versionen in einem
    > Listenfeld anzeigen. Die zugrundeliegende Tabelle hat folgenden
    > Aufbau:
    >
    > lngVersionID lngSOPID lngVersion lngDraft
    > 1                 1             1              0
    > 2                 3             1              0
    > 3                 1             2              1
    > 4                 1             2              2
    > 5                 3             2              1
    > 6                 3             3              0
    > 7                 1             3              1
    > 8                 1             2              3
    >
    > Wenn eine Version final ist, steht im Feld Draft eine 0, sonst werden
    > sie Versionen hochgezählt.
    > In meinem Listenfeld sollte dann zu sehen sein:
    >
    > SOPID   V  D
    > 1          3  1
    > 3          3  0
    >
    > Mit
    > SELECT lngSOPID, Max(lngVersion) AS L, Max(lngDraft) AS D FROM
    > tblSOPVersion GROUP BY lngSOPID
    > wir mir unter D für die SOPID 1 natürlich die 2 ausgegeben.
    >
    > Ich suche also nach einer Möglichkeit, zuerst den Maximalwert von
    > Version und dann in Abhängigkeit von diesen DS den Maximalwert von
    > Draft pro Version zu ermitteln. Geht das mit SQL oder muss ich mir da
    > eine andere Lösung suchen?
     
    Deine Kombination aus Beispieldaten und Beschreibung ist nicht
    ganz koscher, aber besonders verwirrend gelungen. :-)
    Mit obigem SQL-String müsstest du erhalten:
    1 3 3
    3 3 1
    nicht etwa "für die SOPID 1 natürlich die 2".
     
    Ich vermute, du willst etwas, das z.B. mit einer Unterabfrage
    machbar ist:
     
    SELECT lngSOPID, lngVersion AS L, lngDraft AS D
    FROM tblSOPVersion As T1
    WHERE lngVersion =
    (
        SELECT Max(lngVersion)
        FROM tblSOPVersion
        WHERE lngSOPID=T1.lngSOPID
    )
     
    Vielleicht brauchst du auch noch eine Sortierung, aber die
    kriegst du sicher selber hin.
     
    --
    Servus
    Karl
    *********
     
     
     
    • Als Antwort markiert Maik Hahmann Montag, 20. Juni 2011 06:25
    Freitag, 17. Juni 2011 14:03

Alle Antworten

  • Maik Hahmann wrote:
    > ich will für eine Versionsverwaltung die letzten Versionen in einem
    > Listenfeld anzeigen. Die zugrundeliegende Tabelle hat folgenden
    > Aufbau:
    >
    > lngVersionID lngSOPID lngVersion lngDraft
    > 1                 1             1              0
    > 2                 3             1              0
    > 3                 1             2              1
    > 4                 1             2              2
    > 5                 3             2              1
    > 6                 3             3              0
    > 7                 1             3              1
    > 8                 1             2              3
    >
    > Wenn eine Version final ist, steht im Feld Draft eine 0, sonst werden
    > sie Versionen hochgezählt.
    > In meinem Listenfeld sollte dann zu sehen sein:
    >
    > SOPID   V  D
    > 1          3  1
    > 3          3  0
    >
    > Mit
    > SELECT lngSOPID, Max(lngVersion) AS L, Max(lngDraft) AS D FROM
    > tblSOPVersion GROUP BY lngSOPID
    > wir mir unter D für die SOPID 1 natürlich die 2 ausgegeben.
    >
    > Ich suche also nach einer Möglichkeit, zuerst den Maximalwert von
    > Version und dann in Abhängigkeit von diesen DS den Maximalwert von
    > Draft pro Version zu ermitteln. Geht das mit SQL oder muss ich mir da
    > eine andere Lösung suchen?
     
    Deine Kombination aus Beispieldaten und Beschreibung ist nicht
    ganz koscher, aber besonders verwirrend gelungen. :-)
    Mit obigem SQL-String müsstest du erhalten:
    1 3 3
    3 3 1
    nicht etwa "für die SOPID 1 natürlich die 2".
     
    Ich vermute, du willst etwas, das z.B. mit einer Unterabfrage
    machbar ist:
     
    SELECT lngSOPID, lngVersion AS L, lngDraft AS D
    FROM tblSOPVersion As T1
    WHERE lngVersion =
    (
        SELECT Max(lngVersion)
        FROM tblSOPVersion
        WHERE lngSOPID=T1.lngSOPID
    )
     
    Vielleicht brauchst du auch noch eine Sortierung, aber die
    kriegst du sicher selber hin.
     
    --
    Servus
    Karl
    *********
     
     
     
    • Als Antwort markiert Maik Hahmann Montag, 20. Juni 2011 06:25
    Freitag, 17. Juni 2011 14:03
  • Hallo Karl,

    ok, mein Beispiel war wirklich etwas verwirrend.
    Aber Dein Hinweis auf die Unterabfrage, war das, was ich gesucht habe.

    Vielen Dank

    Gruß Maik

    Montag, 20. Juni 2011 06:28