Mickey: [MySQL]MAX(date)

hi all,

stehe gerade etwas auf der grossen wietenr leitug

habe eine table [A]:

USER I ROUND I DATE
---------------------------------
usera I 3 I 2004-04-01
usera I 4 I 2004-04-11
usera I 2 I 2004-04-21
userb I 6 I 2004-03-01
userb I 4 I 2004-04-01

SO, ich möchte mir nur die neursten runden angezeigt werden
also, jeder user soll erschienen, aber nur mit der runde die als letztes gemacht wurde

ergebniss:
usera I 2 I 2004-04-21
userb I 4 I 2004-04-01

bastle schon diue ganze zeit herum, nur wenn ich SELECt max(DATE),ROUND FROM A GROUP BY USER mache
steht immer das neuerste datum da, das passt, nur nicht die dazugehörige runde !
jemand eine idee? geht das evnetuell mit joins? habe mal einen ansatz, nur leider sitmmt dieser sicher nicht, oder?

soweit bin ich gekommen:

SELECT
  e_dummy.USER,e_dummy.ROUND,e_dummy.DATE
FROM
   A as e
    INNER JOIN A as e_dummy
    ON
      e.USER=e_dummy.USER
      AND
      e.DATE<e_dummy.DATE
GROUP BY e.USER

AUSGABE:
usera I 4 I 2004-04-11
userb I 4 I 2004-04-01

SELECT
  e_dummy.USER,e_dummy.ROUND,e_dummy.DATE
FROM
   A as e
    INNER JOIN A as e_dummy
    ON
      e.USER=e_dummy.USER
      AND
      e.DATE>e_dummy.DATE
GROUP BY e.USER

AUSGABE:
usera I 3 I 2004-04-01
userb I 6 I 2004-03-01

also beides keine werte die ich haben will. erstes ist schon nah dran, nur zeigt er mir den 2 wert von usera und bei userb ebenfalls.

danke

  1. yo,

    es geht entweder über zwei abfragen oder aber unterabfragen. willst du beides umgehen, gibt es noch eine weitere möglichkeit, die aber vorrausetzt, dass datumsangaben sich nicht gleichen, sprich pro user nicht datensätze vorkommen, die das gleiche datum haben. das wäre dann.

    SELECT user, MAX(round) GROUP BY user HAVING date = MAX(date);

    wobei man für MAX(rouund) auch MIN(round) nemhen kan, wichtig ist nur, dass es eine aggregatfunktion ist.

    Ilja

    1. [.....]

      SELECT user, MAX(round) GROUP BY user HAVING date = MAX(date);

      das haut mal mit diesem beispiel nicht hin. schriebt mir genau gar ncihts hin....
      habe übrgins noch version 4.0.X das ist glaube ich noch kein subselectg möglich, und ein update währe jetzt etwas übertrieben. kann mir ja nicht vorstellen das das nicht wikrlich geht.

      1. yo,

        das haut mal mit diesem beispiel nicht hin. schriebt mir genau gar ncihts hin....

        was genau haut den nicht hin, bzw. welche ergebnisliste liefert er, eine leere  ???

        Ilja

        1. [......]

          was genau haut den nicht hin, bzw. welche ergebnisliste liefert er, eine leere  ???

          ja, wie gesagt nichts. es sind zum testen die sleben datensätze wie oben angeführt drinnen und es kommt nichts.

          danke

          1. [......]
            so sollte es jetzt passen:
            SELECT USER,ROUND,MAX(CONCAT(DATE,' I ',ROUND)) as VALUE
            FROM A GROUP BY USER

            muss man halt das ergebnis von VALUE dann teilen (array etc.)

            gruss

            1. yo,

              so sollte es jetzt passen:
              SELECT USER,ROUND,MAX(CONCAT(DATE,' I ',ROUND)) as VALUE
              FROM A GROUP BY USER

              das würde mich wundern...aber wunder kommen immer wieder vor

              Ilja