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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 53
    Points : 25
    Points
    25
    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
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 20
    Points : 18
    Points
    18
    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
    Futur Membre du Club
    Inscrit en
    Septembre 2005
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 4
    Points : 5
    Points
    5
    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