Aktuellsten Beitrag je einer Gruppe (MySQL Syntax Problem)

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

  • Aktuellsten Beitrag je einer Gruppe (MySQL Syntax Problem)

    Hallo

    Ich habe mich gerade in der MySQL Syntax verzaudert. Da ich gerade mal grundlegende Abfragen tätigen kann, bin ich da an ein für mich schwer lösbares Problem gestossen.

    Ich möchte aus einer Tabelle die z.B folgendermassen aufgebaut ist:

    Code:
    tabelle:
      |   id   |   datum  |    zeit    |   nr   |
      -------------------------------------------------
      |   1    | 20050306 |  12:03:34  |    3   |
      |   2    | 20050305 |  12:03:34  |    4   |
      |   3    | 20050305 |  11:03:34  |    5   |
      |   4    | 20050307 |  12:03:34  |    4   |
      |   5    | 20050211 |  12:03:34  |    3   |
      |   6    | 20050403 |  12:03:34  |    4   |
      |   7    | 20050403 |  11:03:34  |    4   |
    jeweils den aktuellsten (grösste zeit und datum) Beitrag je einer Nr rausholen und nach Aktualität ordnen.

    Ergebnis sollte so sein:

    Code:
      |   id   |   datum  |    zeit    |   nr   |
      -------------------------------------------------
      |   6    | 20050403 | 12:03:34   |    4   |
      |   1    | 20050306 | 12:03:34   |    3   |
      |   3    | 20050305 | 11:03:34   |    5   |

    Wie verpacke ich dies in einen MySQL Ausdruck? Ich habe folgendes versucht, ist aber leider gescheitert:


    PHP-Code:
    SELECT id,nr
    FROM 
    (

    SELECT *
    FROM `tabelle`
    ORDER BY datum DESC uhrzeit DESC
    ) AS DerivedTable1
    GROUP BY nr
    ORDER BY datum DESC 
    uhrzeit DESC 

  • #2
    ein glück war die url noch in meiner history, wollte dich gerade auf die suchfunktion des forums hinweisen

    http://dev.mysql.com/doc/refman/5.1/...group-row.html

    auch die comments lesen!
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Soweit bin ich zuvor beim Durchsuchen des Manuals auch gekommen. Mein Hauptproblem ist aber, dass ich nicht nur eine Bedingung für MAX habe sondern zwei, nämlich das Datum UND die Zeit. Ich habe keine Ahnung, wie dies zu bewerkstelligen ist.

      Kommentar


      • #4
        so?
        Code:
        select * from tab t1
          where id in (
            select id from tab t2
              where concat(datum,zeit)=(
                select max(concat(datum,zeit)) from tab t3 where t3.nr=t2.nr)
              group by nr);
        was machen die vielen Gedanken in meinem Kopf ?

        Kommentar


        • #5
          Original geschrieben von Melligem
          Mein Hauptproblem ist aber, dass ich nicht nur eine Bedingung für MAX habe sonder zwei, nämlich das Datum UND die Zeit.
          Dein Hauptproblem ist die suboptimale Datenstruktur ...

          Wieso legst du denn Datum und Zeit überhaupt getrennt ab - anstatt dafür einen passenden Spaltentyp zu wählen?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Ich weiss, es ist dämlich, dass zwei Datensätze vorhanden sind. Am liebsten würde ich einfach einen Unixtimestamp verwenden, aber in meinem Fall handelt es sich um eine Datenbank mit ca. 3000 vorhandenen Datensätzen. Die müssen richtig sortiert werden.

            Mir ist gerade die Idee gekommen, ein Script zu schreiben um die Daten und Zeit in einen Timestamp umzuwandeln.
            Zuletzt geändert von Melligem; 19.04.2006, 12:51.

            Kommentar


            • #7
              Original geschrieben von Melligem
              Am liebsten würde ich einfach einen Unixtimestamp verwenden
              Warum? MySQL kennt doch Datums- und Zeit-Typen, die oftmals sehr viel besser geeignet sind, um solche Werte abzulegen.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Na, ich bin halt mit deren Umgang besser vertraut und finde diese recht flexibel, da man sie mit dem php date() Befehl in jede gewünschte Forum umformen kann.

                Kommentar


                • #9
                  Original geschrieben von wahsaga
                  Warum? MySQL kennt doch Datums- und Zeit-Typen, die oftmals sehr viel besser geeignet sind, um solche Werte abzulegen.
                  welche wären das (datetime?) und was genau ist an ihnen besser? ich nutzt ebenfalls immer unix timestamp, da mit deren umgang vertraut ist und ich sie beliebig umformen kann ...

                  Kommentar


                  • #10
                    Original geschrieben von firstlord18
                    welche wären das (datetime?) und was genau ist an ihnen besser?
                    Du kannst damit Sortierungen und Auswahlen nach bestimmten Datumsbestandteilen (wie etwa Jahr, Monat, Tag) direkt in MySQL sehr viel angenehmer und performanter machen, als wenn du jedes mal erst mal MySQL den Unix Timestamp wieder umwandeln lassen müsstest.
                    ich nutzt ebenfalls immer unix timestamp, da mit deren umgang vertraut ist und ich sie beliebig umformen kann ...
                    Watt der Bur nicht kennt, datt frisst er nich' ...
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar

                    Lädt...
                    X