Suche den nächsten timestamp

Hallo,

In meiner MySQL-Datenbank habe ich eine Spalte, die date_of_birth heisst. Diese beinhaltet Timestamps wie:
483753600 // <-- 1985
799286400 // <-- 1995
1234564290 // <-- 2009
1430438400 // <-- 2015

Mit dem Timestamp 736214400 (welche das Jahr 1993 ausgibt), möchte ich erfahren, welche der Einträge in der Datenbank den Timestamp am nähesten sind und zwar ganz egal, ob drüber oder drunter. In diesem Fall müsste es mir also den Timestamp 799286400 (1995) ausgeben.

Ich habe es so ausprobiert:
SQL:
SELECT uid FROM personal WHERE personal.date_of_birth > 736214400 OR personal.date_of_birth < 736214400 LIMIT 1
Die Ausgabe wird 1985 sein, sollte aber jedoch 1995 sein, da 1993 näher an 1995 liegt.

Hätte da jemand eine Lösung für mich?
 
Hmm, das gibt mir folgendes aus:
Code:
array(1) {
  [0]=>
  array(1) {
    ["MIN(ABS(736214400 - date_of_birth ))"]=>
    string(8) "63072000"
  }
}
63072000 = 1971
 
Was auch funktionieren sollte:
1. Gib mir die uid aller Personen p1 für die gilt: es existiert keine andere Person p2 mit kleinerem "Timestamp-Abstand".
2. Gib mir die uid aller Personen p1, deren "Timestamp-Abstand" identisch mit dem kleinsten "Timestamp-Abstand" aller Personen ist.

In SQL (ungetestet):
SQL:
SELECT uid
  FROM personal p1
 WHERE NOT EXISTS (
         SELECT 1 
           FROM personal p2
          WHERE ABS(p2.date_of_birth - 1335830400) < ABS(p1.date_of_birth - 1335830400)
       );
bzw.
SQL:
SELECT uid
  FROM personal
 WHERE ABS(date_of_birth - 1335830400) = (
         SELECT min(abs(date_of_birth - 1335830400)) 
           FROM personal
       );
Was besser/schneller ist, hängt von der Qualität des Optimierers des verwendeten DBMS ab. MySQL da teilweise überhaupt nicht gut darin -> Ausführungsplan anschauen.
 
Hmm, das gibt mir folgendes aus:
Code:
array(1) {
  [0]=>
  array(1) {
    ["MIN(ABS(736214400 - date_of_birth ))"]=>
    string(8) "63072000"
  }
}
63072000 = 1971
Naja bisschen selber denken hätte ich jetzt schon erwartet. Du bekommst so natürlich die Differenz. Wenn du den Timesharing haben willst, musste halt noch ne Column mehr selektieren
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben