42 Stimmen

SQL-Abfrage zur Anzeige des nächstgelegenen Datums?

Ich versuche herauszufinden, wie ich eine MySQL-Abfrage schreiben kann, die die nächsten 3 Ereignisse in Bezug auf das Datum zurückgibt.

Das ist mein Tisch:

EVENT_ID    EVENT_NAME     EVENT_START_DATE(DATETIME)
1           test           2011-06-01 23:00:00
2           test2          2011-06-03 23:00:00
3           test3          2011-07-01 23:00:00
4           test4          2011-08-09 23:00:00
5           test5          2011-06-02 23:00:00
6           test6          2011-04-20 23:00:00

Das Abfrageergebnis sollte also für die IDs 1,2,5 sein, da sie im Vergleich zum aktuellen Datum am ehesten auftreten.

EDITAR: Abfrage sollte nur zukünftige Ereignisse finden.

2 Stimmen

Diese Daten stammen aus dem Jahr 2010, also sind 4, 3 und 2 am nächsten an der Gegenwart :) Ich bin davon ausgegangen, dass du mit diesen Daten 2011 meinst.

0 Stimmen

@Mat wow, das habe ich völlig übersehen. Sorry, korrigiert auf 2011

94voto

Mat Punkte 6546
SELECT event_id 
FROM Table 
ORDER BY ABS( DATEDIFF( EVENT_START_DATE, NOW() ) ) 
LIMIT 3

Le site ABS() bedeutet, dass ein Ereignis, das 1 Tag zurückliegt, genauso nah ist wie ein Ereignis, das 1 Tag in der Zukunft liegt. Wenn Sie nur Ereignisse haben wollen, die noch nicht eingetreten sind, machen Sie

SELECT event_id 
FROM Table 
WHERE EVENT_START_DATE > NOW() 
ORDER BY EVENT_START_DATE 
LIMIT 3

1 Stimmen

Diese Abfrage sortiert nur die ausgewählten Werte und filtert sie nicht vor der Auswahl.

5voto

hsz Punkte 142920
  SELECT *
    FROM table
   WHERE EVENT_START_DATE >= NOW()
ORDER BY EVENT_START_DATE
   LIMIT 3

2voto

Damian Pavlica Punkte 25600

Die Abfrage aus der akzeptierten Antwort sortiert eigentlich nur die zuvor ausgewählten Werte und filtert sie nicht vor der Auswahl. Aber diese Abfrage funktioniert für mich:

SELECT event_id, event_date
FROM events 
WHERE ABS(TIMESTAMPDIFF(DAY, event_date, $some_date)) < 10
ORDER BY event_date

Erläuterung: Nummer 10 ist ein Tagesbereich (sowohl nach als auch vor). Ohne ABS() Sie können nur frühere oder künftige Ereignisse auswählen, aber ich brauchte das nächstliegende.

0voto

Andre Backlund Punkte 6685

Ich nehme an, das ist es, wonach Sie suchen. Es ist ähnlich wie jeder elses Antworten als gut.

SELECT EVENT_ID FROM TABLE WHERE EVENT_START_DATE > NOW() ORDER BY ABS(DATEDIFF(EVENT_START_DATE, NOW())) ASC LIMIT 3

-1voto

xecaps12 Punkte 5248
SELECT event_id FROM Table ORDER BY EVENT_START_DATE LIMIT 3

0 Stimmen

Das ergibt auch event_id 6, die in der Vergangenheit liegt.

1 Stimmen

Es wäre besser, wenn es so wäre: SELECT event_id FROM Tabelle EVENT_START_DATE >= CURRENT_TIMESTAMP ORDER BY EVENT_START_DATE LIMIT 3

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X