[SQL allgemein] Jeweils den aktuellsten DS ermitteln

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

  • [SQL allgemein] Jeweils den aktuellsten DS ermitteln

    Hallo, zusammen!

    Ich habe ein kleines Problem bzw. eine Frage:

    Meine Datenbank enthält, unter anderem, die Spalten Name und Datum.
    Die Namen sind mehrfach vohanden.

    Jetzt möchte ich jeden Namen ausgegeben haben, allerdings nur jeden einmal und zwar den der das aktuellste Datum hat.


    Bisher bin ich hingegangen und habe alle Namen ausgelesen und dann bei jedem Namen den Datensatz mit dem aktuellsten Datum ausgelesen.

    Die Frage ist jetzt, ob sich das ganze eleganter mit einer einzigen SQL Abfrage lösen lässt.

    Hier mal ein Beispiel, damit es auch wirklich klar wird:

    Tabelle:
    [FONT=courier new]
    +------+------------+
    + Name + Datum +
    +------+------------+
    + Eins + 2004-01-01 +
    +------+------------+
    + Eins + 2004-02-01 +
    +------+------------+
    + Zwei + 2004-01-10 +
    +------+------------+
    + Zwei + 2004-02-10 +
    +------+------------+
    + Drei + 2004-01-15 +
    +------+------------+
    + Drei + 2004-01-15 +
    +------+------------+
    [/FONT]
    Ergebis:

    Eins, 2004-02-01
    Zwei, 2004-02-10
    Drei, 2004-02-15


    Gruß und Dank,
    Björn
    Zuletzt geändert von Vaurien; 29.03.2004, 10:30.

  • #2
    probier mal ....
    Code:
    SELECT DISTINCT name, datum FROM tabelle ORDER BY name ASC
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Hi!

      Leider funktioniert "DISTINCT" nicht so, wie ich es gerne hätte, da die Datensätzt nicht wirklich doppelt sind.

      Unter umständen ist nämlich nur der name gleich.

      Gibt es eine andere Lösung?

      Gruß und Dank,
      Björn

      Kommentar


      • #4
        Original geschrieben von Vaurien
        Unter umständen ist nämlich nur der name gleich.
        ach was.... dann schaue mal nach, was DISTINCT macht. www.mysql.com
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          ach was.... dann schaue mal nach, was DISTINCT macht.
          Alle Spalten, die nach "DISTINCT" folgen müssen gleich sein, damit SQL diese als doppelt erkennt.

          Wenn ich nur "SELECT DISCTINCT Name FROM table" nehme, wir nur ein Datensatz pro Name ausgegeben.

          Kommt allerdings das "Datum" Feld hinzu
          ("SELECT DISTINCT Name, Datum FROM table ORDER BY Name ASC")
          dann werden mir wieder alle Datensätze angezeigt, da das Datum unterschiedlich ist.
          - QED -


          Oder habe ich einen Denkfehler gemacht?

          Gruß und Dank,
          Björn

          Kommentar


          • #6
            Original geschrieben von Vaurien
            Oder habe ich einen Denkfehler gemacht?
            kann auch sein, dass ich mich irre...

            dann machs mal so (ohne garantie)

            Code:
            SELECT name, datum FROM tabelle GROUP BY name ORDER BY name ASC
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              "GROP BY" funktioniert zwar, aber nicht so wie ich es gerne hätte.

              Es wird pro Name nur ein Datensatz angezeigt.
              So weit so gut.

              Allerdings wird nicht der aktuellste DS genommen, sondern der, der zuerst in der Tabelle steht.

              Eine Änderung der "ORDER BY" Clause nützt nichts, da "group by" zuerst ausgeführt wird.

              Hast du eine Idee, oder gibt es für mein Problem keine Lösung?!?

              Gruß und Dank,
              Björn

              Kommentar


              • #8
                ... order by datum desc, name asc

                Kommentar


                • #9
                  Wie ich schon schrieb:
                  Eine Änderung der "ORDER BY" Clause nützt nichts, da "group by" zuerst ausgeführt wird.
                  Die Datensätze werden erst sortiert, nachdem sie gruppiert wurden.

                  Gruß,
                  Björn

                  Kommentar


                  • #10
                    dann bleibt dir nur die möglichkeit, dass mit 1 großen query zu machen, und in php auszuwerten.
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Schade!

                      Tja, da kann mal wohl nix machen.

                      Dann werde ich wie bisher verfahren.

                      Danke euch für die Hilfe!

                      Gruß,
                      Björn

                      Kommentar


                      • #12
                        kann denn dein dbms subselect ?

                        Kommentar


                        • #13
                          Hi!

                          MySQL sollte subquerys können, falls du das meinst...

                          Gruß,
                          Björn

                          Kommentar


                          • #14
                            nur MySQL ab 4.1 kann mit subselect umgehen, falls zutrifft, probiere mal:

                            select * from tblTable a where a.datum=(select b.datum from tblTable b
                            where b.name=a.name order by b.datum desc limit 1)

                            Kommentar


                            • #15
                              Tja, da ich nur MySQL 3.23.48 habe, kann ich dass erstmal vergessen.

                              Dennoch danke.

                              Gruß,
                              Björn

                              Kommentar

                              Lädt...
                              X