IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

operateur "plus proche"


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Par défaut operateur "plus proche"
    Bonjour, je post en doutant un max, existe il un operateur postgres qui donne la date la plus proche disponible d'une date.(timestamp)

    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select nom_fichier
    from table
    where date is_nearest "2003-12-05 00:00:00";
    je suis en train de me galerer assez joliement pour trouver un truc du style. Meme si la fonction n'existe pas, je veux bien un coup de pouce.

    merci bien

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pourquoi ne pas faire une requete de différence :

    SELECT (ta_date - dat2) FROM table WHERE condition ORDER BY 1;

    Ainsi il te renverra les lignes trié de la plus prpoche à la plu éloigné.
    Voir peut être à utiliser une fonction de renovie de la valeur absolue car il risque de te renvoyer des différence négatives...

  3. #3
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Par défaut
    Citation Envoyé par TitAnz35
    Pourquoi ne pas faire une requete de différence :

    SELECT (ta_date - dat2) FROM table WHERE condition ORDER BY 1;
    Ainsi il te renverra les lignes trié de la plus prpoche à la plu éloigné.
    Voir peut être à utiliser une fonction de renovie de la valeur absolue car il risque de te renvoyer des différence négatives...
    C'est la bonne idée qu'il faut exploiter :-) Étant donné que la fonction abs(::interval) n'existe pas en PostgreSQL, on peut s'en sortir par une comparaison des dates associée à un case..when.. en SQL tout bête.

    Dans mon exemple, je veux trouver le timestamp le plus proche de now(). Vous pourrez facilement remplacer pour l'adapter à vos besoins:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    test=# select now();
                  now
    -------------------------------
     2006-08-04 16:50:49.115187+02
    (1 ligne)
     
    test=# select * from test;
                 a
    ----------------------------
     2006-08-01 16:47:34.203246
     2006-08-02 16:47:36.563467
     2006-08-03 16:47:38.92819
     2006-08-04 16:47:42.036417
     2006-08-05 16:47:45.170757
     2006-08-06 16:47:47.638056
    (6 lignes)
     
    test=# select a, case when now()>a then now()-a else a-now() end as tri  from test order by tri limit 1;
                 a              |       tri
    ----------------------------+-----------------
     2006-08-04 16:47:42.036417 | 00:03:19.085394
    (1 ligne)

Discussions similaires

  1. Recherche de point le plus proche [façon optimal]
    Par norwy dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 21/10/2005, 17h15
  2. Récupurer via une requête SQL la valeur la plus proche
    Par yoda_style dans le forum Langage SQL
    Réponses: 9
    Dernier message: 27/04/2004, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo