SELECT-Abfrage?

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

  • SELECT-Abfrage?

    Hallo zusammen!

    Ich habe eine Tabelle mit folgenden Werten:

    AdressID;KaufNr;Betrag;
    15411;1;2131.00;
    16456;1;123.00;
    15411;2;4238.00;
    64461;14392.00;
    12164:142.00;
    15411;3;6464.00;

    Jetzt möchte ich mit einer Select-Abfrage den letzten Kauf jeder AdressID anzeigen! Das heisst es sollte folgende Liste ausgeben werden:

    AdressID;KaufNr;Betrag;
    16456;1;123.00;
    64461;14392.00;
    12164:142.00;
    15411;3;6464.00;

    Kann mir da jemand weiterhelfen?

    Thanks, für Eure Hilfe!

  • #2
    wenn man wüßte, aus welchen kriterien sich der letzte kauf zusammensetzt. das ist nicht klar. was ist adressid, was ist kaufnr?

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Bei jedem Kauf wird in der Tabellen "Umsatz" ein Eintrag gemacht:

      Beispiel:

      Der Kunde mit der AdressID 15411 (KundenID!) bestellt Waren im Wert von 500 Euro.

      Dann wird in der Tabelle "Umsatz" folgender Eintrag gemacht:

      Spalten: AdressID;KaufNr;Betrag;
      Einträge: 15411;1;500.00;

      Die KaufNr wird beim INSERT-Befehl wie folgt definiert:

      Letzter Kauf + 1; d.h. sofern der Kunde noch nie gekauft hat, wird der Wert 1 eingetragen, ansonsten jeweils 1 dazu gerechnet!

      Kommentar


      • #4
        Am einfachsten wär's mit einem SUBSELECT - wenn deine DB das unterstützt.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Wie könnte so ein Subselect den aussehen?

          Kommentar


          • #6
            Du ermittelst zu allen in Frage kommenden Datensätzen (Adress-ID) den letzten (was du bei deinem Datenmodell wohl an der Kauf-ID festmachen möchtest) - und über dessen ID wählst du ihn dann wieder im "übergeordneten" Select aus.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Verstehe ich nicht ganz?

              Ich müsste ja irgendwie den letzten Datensatz (KaufNr) pro AdressID haben; und genau das ist mein Problem!

              Kommentar


              • #8
                Original geschrieben von ThomasM
                Verstehe ich nicht ganz?
                Ist das eine Frage?
                Ich müsste ja irgendwie den letzten Datensatz (KaufNr) pro AdressID haben; und genau das ist mein Problem!
                Und einen möglichen Weg dahin habe ich dir beschrieben.

                Vielleicht mal bzgl. Subselects ins Manual des DBMS schauen ...?
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Hallo zusammen!

                  Hab das ganze versucht umzusetzen und es klappt nicht; es werden alle trotzdem alle Datensätze angezeigt (nicht nur der letzte Kauf)!

                  Mein Code (Stored Procedure > MSSQL):

                  CREATE Procedure test
                  AS
                  SELECT * FROM tb1
                  LEFT JOIN tb2
                  ON tb1.AdressID = tb2.AdressID
                  WHERE EXISTS
                  (SELECT TOP 1 tb2.Betrag FROM tb2 ORDER BY tb2.KaufNr DESC)
                  ORDER BY tb1.AdressID ASC
                  GO

                  Hat jemand eine Idee was ich falsch mache?

                  Thanks

                  Kommentar


                  • #10
                    Wozu denn ein LEFT JOIN?
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Ich habe einige ähnliche Beispiele im Manual gefunden aber keine vernünftige Lösung mit nur einer Tabelle gefunden; aus diesem Grund habe ich es mit einem LEFT JOIN auf die Tabelle "Kunden" versucht.

                      Kommentar


                      • #12
                        Hast du noch eine pro Datensatz eindeutige ID in deiner Tabelle - oder ergibt sich eine eindeutige Identifizierung der Datensätze erst dann, wenn man Adress-ID und Kauf-Nr zusammennimmt?
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Also unter MySQL würde ich da einfach sowas in der Art machen:
                          Code:
                          SELECT * FROM tabelle t1 WHERE kaufnr =
                             (SELECT MAX(kaufnr) FROM tabelle t2 WHERE adressid = t1.adressid GROUP BY adressid)
                          Ob das unter MSSQL genauso funktioniert, musst du ausprobieren.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Das GROUP BY hat zuerst einen Fehler verursacht; nachdem ich es aber entfernt habe, funktioniert es einwandfrei!

                            Das ist nun der Code für MSSQL:

                            Code:
                            CREATE Procedure test
                            AS
                            SELECT * FROM tabelle t1
                            WHERE kaufNr =
                            (SELECT MAX (kaufNr) FROM tabelle t2
                            WHERE t2.adressID = t1.adressID)
                            GO
                            Besten Dank für Deine Hilfe!

                            Kommentar

                            Lädt...
                            X