SQL-Syntax: späteste Uhrzeit suchen?
sandro
- datenbank
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
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
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
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 3cSuchergebniss
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
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
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
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
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