Saul: Mehrere Bedingungen in einer Abfrage?

Hallo!

Ich habe folgendes Problem.

Ich habe in einer Abfrage eine group_id und eine ID (Primary Key).

Nach der group_id gruppiere ich die Abfrage und nach der ID ordne ich absteigend.

Nun gibt es bei MIN(ID) und bei MAX(ID) unterschiedliche Namen (name).

Ich habe es bis jetzt nur geschafft den Namen zu einer der beiden in einer Abfrage auszulesen. Geht es auch, dass ich die Namen zu MIN(ID) und MAX(ID) in einer Abfrage auslese?

Danke für eure Antworten

  1. Ja geht prinzipiell auch.

    Select name.tb1, name.tb2 from table tb1, table tb2 where tb1.max(id)and tb2.max(id)

    So ganz ist der code nicht richtig aber ich hoffe Du hast das mit den alias Namen verstanden tb1 und tb2....

    1. Ich glaube du hast das falsch verstanden.

      Eigentlich müsste ich ja abfragen

      SELECT name FROM tabelle WHERE ID=MAX(ID) OR ID=MIN(ID)

      Das geht aber nicht beim WHERE, weil ich da bereits eine andere Bedingung habe, die dort alleine stehen muss.

      Es muss irgendwie anders gehen.

      1. Ja sorry falsch verstnden du musst es aber mit einem and verknüpfen.
        Ausserdem findet er bei deinem Select anweisung nicht`s, denn zu neiner suche max und min id gibt es bestimmt keine treffer. Oder zumindest immer den gleichen. Es handelt sich doch um zwei unterschiedliche ids die ID und die Group Id oder?

        1. Herje nochmals ich glaube jetzt ist es richtig.
          Sorry sorry sorry....

          select name.tb1, name.tb2 from table tb1, table tb2 where tb1.grpid = max(tb1.grpid) and tb2.grpid = max(tb2.grpid) and tbi.id = min(tb1.id) and tb2.id = min(tb2,id)

          Ich hoffe ich habs nun richtig verstanden.

          1. Auch nicht :)

            denn im WHERE steht bereits die main_id. Das ist eine noch höhere ID und ich hole mir alle Datensätze mit der main_id='1' gruppiere nach group_id und brauche name von MIN(ID) und MAX(ID)

            Ziemlich viele IDs hier :)

            1. Ja Du musst aber alle bedingunen entsprechend mit and oder or verbinden und hinter where hinschreiben.

              Hinter where können gerne auch mehr anweisungen stehen.

              1. In dem Fall nicht, da ich alle Datensätze mit main_id='1' brauche.

                Wie soll ich da noch ein OR oder AND einfügen, das kommt ja sozusagen erst darunter, wenn alle Datensätze mit main_id='1' gewählt sind.

                1. Du musst die Abfrage entsprechend erweitern....

                  select name.tb1, name.tb2 from table tb1, table tb2 where tb1.grpid = max(tb1.grpid) and tb2.grpid = max(tb2.grpid) and tbi.id = min(tb1.id) and tb2.id = min(tb2,id)and

                  tb2.grpid = main_id and tb1.main_id = main_id

                  Verstanden ??? Du kannst das ganze mit beliebigen Bedingung erweitern und über aliase so tief verschachteln wie Du willst.
                  Muss nur schnell weg und kann erst in 40 Minuten wieder helfen.

        2. Die group_id ist eigentlich unwichtig, nach der wird nur gruppiert, da es zu jeder group_id mehrere Treffer geben kann.

          Wichtig ist die MIN(ID) und MAX(ID) von jeder group_id, da ich zu MIN(ID) und MAX(ID) die Namen brauche, die auch in dieser Zeile stehen.

          Und die kann ich nicht beide auf einmal abfragen.

  2. Sorry hab grad gepennt beim Posting.

    Indem Fall müsste das SQl Statement folgendermassen lauten...
    select name from table where groupid = max(groupid) and id = min(id)

    Hab leider nicht verstanden wie herum Du das haben möchtest.
    Ich hoffe du hast es verstanden.