sandro: SQL-Syntax: späteste Uhrzeit suchen?

guten tach!

ich habe eine Frage betreffend SQL-Syntax.
Ich habe eine Access-DB mit einer Tabelle, welche eine spalte "VonDateTime" beinhaltet. In dieser Spalte stehen immer Datum und Uhrzeit.
Nun möchte ich herausfinden, welches Feld in einer Spalte die "grösste" bzw. die späteste Zeit beinhaltet.

Weiss jemand, wie dies gemacht wird?
ich habe 2 kriterien, nämlich eine employeID und das Datum..welches abe auch in der Spalte VonDateTime steht....

was ich nicht herausfinde ist, wie ich das "grösste" oder späteste Datum finden kann, kann mir da jemand weiterhelfen?

Ich stelle hier mal ein kleines Beispiel zur Verfügung, damit das ganze ein bisschen verständlicher ist:

SELECT Tree_Works.FromDateTime
FROM Tree_Works
WHERE (((Tree_Works.EmployeID)=6) AND (("TreeWorks.FromDateTime") > ???? AND ((Tree_Works.FromDateTime)=#11/7/2003#));

...bei den ???? weiss ich eben nicht was schreiben..ich habe mir gedacht, etwas wie fromdatetime > fromdatetime.* oder so etwas ähnliches....geht aber nicht...eventuell gibt es ja eine Funktion, welche das späteste Datum ermittelt???

Danke im Voraus für eure Hilfe...

Viele Grüsse, Sandro

  1. Hi,

    Deine Frage habe ich so ganz nicht verstanden aber vieleicht hilft ja das:

    SELECT Tree_Works.FromDateTime
    FROM Tree_Works
    WHERE (((Tree_Works.EmployeID)=6) AND (("TreeWorks.FromDateTime") > ???? AND ((Tree_Works.FromDateTime)=#11/7/2003#));

    SELECT Tree_Works.FromDateTime
    FROM Tree_Works
    WHERE (((Tree_Works.EmployeID)=6) AND ((Tree_Works.FromDateTime)=#11/7/2003#))
    AND (("TreeWorks.FromDateTime") > (Select max(Tree_Works.FromDateTime));

    Deine Frage habe ich leider nicht verstanden. Mach doch als Beipsiele folgendes:

    Tabelle xy:

    ID | Spalte1 | Spalte2 | Spalte3
    --------------------------------
    1  | Wert1a  | Wert2a  | Wert 3a
    2  | Wert1b  | Wert2b  | Wert 3b
    3  | Wert1c  | Wert2c  | Wert 3c

    Suchergebniss

    ID | Spalte1 | Spalte2 | Spalte3
    --------------------------------
    1  | Wert1b  | Wert2b  | Wert 3b

    Damit ist es für mich viel einfacher zu verstehen was Du suchst.
    Ja und dann noch einen Verständlichen Satz, welche Bedingungen erfüllt sein müssen, damit ein Satz angezeigt werden soll.

    Gruss Matze

    1. danke!

      kam doch noch ein checker :-) ...also ich habe mir fast gedacht, dass diese frage ein bisschen komisch gestellt war..sorry. deine idee sieht aber trotzdem gut aus! dieses Select max kannte ich noch nicht...aber er gibt mir beim select max einen syntax-fehler raus!
      muss aber noch besser probieren und tüfteln, dann klappts vielleicht.

      ich erkläre trotzdem nochmal was ich will.
      ich habe eine tabelle:

      ID | FromDateTime        | employeID|
      1  | 30.05.84 09:00:00   | 6        |
      2  | 30.05.84 10:00:00   | 6        |
      3  | 30.05.84 11:00:00   | 6        |

      nun möchte ich eine abfrage machen, welche mir das FromDateTime mit der spätesten Zeit, also mit 11:00:00 (Datensatz mit ID 3) ausgibt.
      natürlich habe ich noch mehr spalten in der tabelle, diese sind hier aber nicht von wichtigkeit.
      die bedingungen sind :
      SELECT fromdatetime (Zeit) WHERE

      • employeID = 6
      • FromDateTime (Datum) = 30.05.84
      • Zeit am spätesten ist. (also hier 11 uhr)

      das Datums-Kriterium kann ich auch aus dem FromDate lesen.

      Ich hoffe du verstehst jetzt was ich meine..ich versuche es nochmals mit deiner idee...mal schauen ob ich es ohne syntaxfehler schaffe:-9

      aber danke vielmals! ich hätte echt keine ahnung wie das geht!
      greetz,
      sandro

      2  | Wert1b       | Wert2b  | Wert 3b
      3  | Wert1c      | Wert2c  | Wert 3c

      Hi,

      Deine Frage habe ich so ganz nicht verstanden aber vieleicht hilft ja das:

      SELECT Tree_Works.FromDateTime
      FROM Tree_Works
      WHERE (((Tree_Works.EmployeID)=6) AND (("TreeWorks.FromDateTime") > ???? AND ((Tree_Works.FromDateTime)=#11/7/2003#));

      SELECT Tree_Works.FromDateTime
      FROM Tree_Works
      WHERE (((Tree_Works.EmployeID)=6) AND ((Tree_Works.FromDateTime)=#11/7/2003#))
      AND (("TreeWorks.FromDateTime") > (Select max(Tree_Works.FromDateTime));

      Deine Frage habe ich leider nicht verstanden. Mach doch als Beipsiele folgendes:

      Tabelle xy:

      ID | Spalte1 | Spalte2 | Spalte3

      1  | Wert1a  | Wert2a  | Wert 3a
      2  | Wert1b  | Wert2b  | Wert 3b
      3  | Wert1c  | Wert2c  | Wert 3c

      Suchergebniss

      ID | Spalte1 | Spalte2 | Spalte3

      1  | Wert1b  | Wert2b  | Wert 3b

      Damit ist es für mich viel einfacher zu verstehen was Du suchst.
      Ja und dann noch einen Verständlichen Satz, welche Bedingungen erfüllt sein müssen, damit ein Satz angezeigt werden soll.

      Gruss Matze

      1. Sorry,

        ich hab leider was vergessen.
        Bzw. mein code war unvollständig.
        Die Abfrage müsste so lauten:

        SELECT FromDateTime
        FROM Tree_Works
        WHERE (((EmployeID)=6) AND ((FromDateTime)=#11/7/2003#))
        AND FromDateTime > (Select max(FromDateTime) from Tree_Works);
                ^ das soll grösser als der ^ grösste eintrag in der DB sein?

        Achja eine vernünftige Info kann dabei nicht herauskommen.
        Denn diese Bedingung wird niemals ein Eintrag erfüllen.
        Es gibt keinen grösseren bzw. älteren eintrag als den ältesten.

        Aber das sollte sofern ich jetzt richtig verstanden habe helfen.

        SELECT FromDateTime
        FROM Tree_Works
        WHERE EmployeID=6 AND FromDateTime)='11/7/2003'
        AND FromDateTime = (Select max(FromDateTime) from Tree_Works where EmployeID=6);

        Eigentlich würde diese Abfrage
        Select max(FromDateTime) from Tree_Works where EmployeID=6
        schon das neueste Datum liefern. Aber nach einer max() anweisung kann man meines Wissens nach keine weitere Felder mehr anzeigen lassen. max(Spalte), Spalte 3 .....

        Kann jedoch sein, dass das nicht bei allen DB Systemen so ist.
        Daher die Verschachtelung wie oben.
        Icvh hoffe das klappt soweit ansonsten Poste doch mal die Fehlermeldung die du bekommst.

        Gruss Matze

    2. däämn!

      ich schaffe es nicht so....ich habe nun folgenden syntax verwendet:

      SELECT Max(Format([Tree_Works].[FromDateTime],'hh.nn.ss')) AS Ausdr1
      FROM Tree_Works
      WHERE (((Tree_Works.EmployeID)=6) AND ((Format([Tree_Works].[CreateDate],'dd.mm.yyyy'))=#11/7/2003 15:22:7#));

      ich habe das datum (für kriterium) vom CreateDate genommen...das ist eine andere spalte, die immer das gleiche datum (nicht zeit,nur datum) beinhaltet. da nur das datum relevant ist und die zeit weggelassen werden muss, habe ich noch das format darüber gemacht.

      diese abfrage gibt keinen fehler, aber auch kein ergebniss, nur eine leere tabelle.

      ich weiss jetzt nicht mehr weiter und hoffe, dass mir jemand helfen kann! :-)

      ich hoffe weiter....und verbleibe mit grüssen,
      sandro

      1. Hi Ihr,

        wäre es schlimm, mehr als einen Datensatz zu haben? Wenn nicht, dann könntest du einfach dein SELECT normal machen und dann ein
        ORDER BY HOUR([Tree_Works].[CreateDate]) DESC, MINUTE([Tree_Works].[CreateDate]) DESC, SECOND([Tree_Works].[CreateDate]) DESC

        Der oberste Datensatz ist dann (hoffentlich) der gesuchte..

        MfG
        Rouven

        --

        -------------------
        ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      2. Hi,

        cool, Du hast trotz meinem Fehler weiter gefunden.

        Du hast hier nur noch einen kleinen Schöhnheitsfehler wie mir scheint.

        SELECT Max(Format([Tree_Works].[FromDateTime],'hh.nn.ss')) AS Ausdr1
        FROM Tree_Works
        WHERE (((Tree_Works.EmployeID)=6) AND ((Format([Tree_Works].[CreateDate],'dd.mm.yyyy'))=#11/7/2003#));
        Wenn Du vorne angibest, dass Datum bestehend aus Tag Monat und Jahr = Datum aus Tag Monat Jahr und Uhrzeit sein soll,
        dann wirst Du da kein Ergebniss finden.

        Gruss Matze