Announcement

Collapse
No announcement yet.

MIt Select einen Datensatz erhalten in einer Stored Procedure

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MIt Select einen Datensatz erhalten in einer Stored Procedure

    Ich habe das Problem das ich einen ganz bestimmten datensatz benötige

    Wenn ich eine Query mit z.B. 3 Datensätzen habe benötige ich den Datensatz wo der aktpreis der größte ist, soweit kein Problem den preis erhalte ich mit:
    <br>
    Select max(aktpreis) from tabelle
    <br>
    aber zusätzlich brauche ich aus der gleichen Tabelle ein weiters feld dem der größte Preis zugewiesen worden ist z.B. die Adressid, die auch in der gleichen Tabelle steht wie der Preis.
    Habe aber das Problem wenn ich z.B.
    <br>
    Select ADR_ID,MAX(aktpreis) from tabelle
    <br>
    eintrage erhalte ich eine Fehlermeldung. Aber ich benötige zusätzlich das Feld ADR_ID. Oder ich müsste die Möglichkeit erhalten in meiner Stored Procedure eine weitere Stored Procedure aufzurufen der eine Variable übergeben werden soll. und erhalte eine eine Datensatz ID die mir den kompl. Datensatz angibt um diesen weiter zu bearbeiten bzw. alle informationen zu erhalten. Somit hätte ich das Problem auch gelöst.

  • #2
    Hallo Elmar,
    was spricht gegen:
    <code>
    SELECT ADR_ID, MAX(AKTPREIS) FROM TABELLE GROUP BY ADR_ID
    </code>
    Das gibt Dir den maximalen AKTPREIS pro ADR_ID.
    <br>
    Thoma
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Nicht so ganz

      brauche ja nur den datensatz mit dem Größten preis somit bekomme ich aber alle Adressids brauche aber nur ein

      Comment


      • #4
        Versuch es mal mit having, bei meinem Test ging es

        SELECT ADR_ID, MAX(AKTPREIS) FROM TABELLE GROUP BY ADR_ID
        having AKTPreis = (select max(AKTPreis) from Tabelle)

        Gruß Andrea

        Comment


        • #5
          Hallo Elmar,
          wenn es zwei Datensätze mit dem grössten Preis gibt, ist das nicht möglich. (Also z.B. 4 Datensätze mit aktPreis 1,00 2,00 3,00 3,00).
          Jetzt gibt es keine eindeutige Adr_id zum höchsten Preis mehr.
          Ein:
          Select ADR_ID,aktpreis from tabelle where aktpreis = (select MAX(aktpreis) from tabelle)
          kann dir auch mehrere Datensätze liefern.

          Fran

          Comment


          • #6
            Ja super danke hat geklappt da es immer nur einen höchstpreis geben kann ist das kein Problem.

            Supp

            Comment


            • #7
              Hallo Elmar,
              zusätzlich zu den hier vorgestellten Lösungen noch ein kleiner Tipp: Sollte es sich hier um eine Tabelle mit vielen Datensätzen handeln, dann könnte es hilfreich sein einen <b>DESCENDING</b> Index auf AKTPREIS zu definieren, da hiermit das MAX(AKTPREIS) erheblich beschleunigt werden könnte.
              <br>
              Thoma
              Thomas Steinmaurer

              Firebird Foundation Committee Member
              Upscene Productions - Database Tools for Developers
              Mein Blog

              Comment


              • #8
                for select id from AUK
                where auk.hauptauktion_id = :U_ID or ID=:U_ID
                into
                :AUK_ID
                do begin
                if (:U_STATUS='2') then
                begin
                for select ART.ID,AUP.AUK_ID,AUP.ART_ID,art.artikelnr,art.art ikelbezeichnung1,art.artikelbezeichnung2,art.vkbru tto from aup,art
                where aup.art_id=art.id and AUP.auk_id = :AUK_ID
                order by art.artikelnr
                into
                :ID,
                :AUK_ID,
                :ART_ID,
                :ARTIKELNR,
                :ARTIKELBEZEICHNUNG1,
                :ARTIKELBEZEICHNUNG2,
                :AKTPREIS
                do begin
                suspend;
                end
                end
                if (:U_STATUS='1') then
                begin
                for select ART.ID,AUP.AUK_ID,AUP.ART_ID,art.artikelnr,art.art ikelbezeichnung1,art.artikelbezeichnung2,ART.VKBru tto from aup,art
                where aup.art_id=art.id and AUP.auk_id = :AUK_ID
                order by art.artikelnr
                into
                :ID,
                :AUK_ID,
                :ART_ID,
                :ARTIKELNR,
                :ARTIKELBEZEICHNUNG1,
                :ARTIKELBEZEICHNUNG2,
                :VKBRUTTO
                do begin
                Select ID,ADR_ID,aktpreis from AUK_LIVE_GEBOT
                where aktpreis = (select MAX(aktpreis) from AUK_LIVE_GEBOT WHERE ART_ID = :ID) and ART_ID = :ID
                into
                :GEBOT_ID,
                :ADR_ID,
                UMMY;

                if (:dummy is null) then
                aktpreis = :vkbrutto;
                if (ummy is not null) then
                aktpreis=ummy;

                suspend;

                dummy = null;
                ADR_ID = null;
                GEBOT_ID = Null;
                end
                end
                end

                So das ist meine SP

                Wenn ich im Debugmode bin klappt alles ohne probleme wenn ich die normal ausführen lassen will gibt er mir nur den 1. Datensatz richtig aus eigentlich müssten es 5 sein die einen Maxpreis haben.

                Nur warum klappt das im Debugmode und im normalen Modus nicht ??? Kapier ich nicht wirklich
                <br>
                Wenn ich den 1. atensatz aus der Gebotstabelle lösche erhalte ich auch nichts mehr als ob er nur einmal in den letzten bereich springt um den MAXpreis abzufrage

                Comment

                Working...
                X