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

Langage SQL Discussion :

Récupurer via une requête SQL la valeur la plus proche


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut Récupurer via une requête SQL la valeur la plus proche
    Bonjour,

    Je me demandais quelle instruction SQL permettait de récupérer la valeur la plus proche inférieur à une valeur de référence.

    Exemple:

    J'ai dans ma base de données 5 dates

    05/04
    10/04
    20/04
    30/04
    01/05

    Nous sommes aujourd'hui le 23/04. J'aimerais faire sortir comme résultat de ma BD la date du 20/04 car c'est la plus proche inférieure.

    Merci d'avance,

    Greg

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT maDate
    FROM maTable a
    WHERE maDate < SYSDATE
    AND NOT EXISTS &#40;SELECT NULL FROM maTable WHERE maDate > a.maDate and maDate < SYSDATE&#41;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT maDate
    FROM maTable
    WHERE maDate < SYSDATE
    AND ROWNUM = 1
    ORDER BY maDate DESC
    ROWNUM est spécifique ORACLE, mais l'équivalent existe dans d'autres SGBDR (LIMIT par exemple)
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select max&#40;madate&#41; as LA_DATE from MA_TABLE where MADATE<sysdate
    Cela ne renvoie pas le bon résultat?

  4. #4
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par soazig
    Et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select max&#40;madate&#41; as LA_DATE from MA_TABLE where MADATE<sysdate
    Cela ne renvoie pas le bon résultat?
    Cela ne marchera pas car il souhaite la date la plus proche (inférieure ou supérieure) et non la date immédiatement inférieure.
    Le mieux est de faire une différence absolue entre ta date et chacune des dates de ta table !

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select colonne_date 
    from ma_table 
    order by min&#40;abs&#40;sysdate-colonne_date&#41;&#41; ASC 
    LIMIT 1
    Attention LIMIT est une clause propre à mysql.
    Tu peux utiliser ROWNUM dans le cas d'Oracle.
    Par contre en SQL pur et dur, je ne vois pas comment faire !
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    en SQL Server il existe DateDiff... Ca serait la meilleure solution...

    je ferais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT TOP 1 champ1, datediff&#40;ss, madate, GETDATE&#40;&#41;&#41; AS diff
    ORDER BY diff

  6. #6
    Membre habitué
    Inscrit en
    Février 2003
    Messages
    171
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 171
    Points : 126
    Points
    126
    Par défaut
    Salut,

    Alexandre T a dit :
    Cela ne marchera pas car il souhaite la date la plus proche (inférieure ou supérieure) et non la date immédiatement inférieure.
    Il s'agit bien de récupérer la date inférieure mais pas supérieur !!!

    J'ai testé la requête de SOAZIG et ça fonctionne bien.

  7. #7
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    J'ai besoin de réapprendre à lire. Autant pour moi
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 736
    Points : 52 448
    Points
    52 448
    Billets dans le blog
    5
    Par défaut
    Une solution valable pour tous (norme SQL)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT MIN&#40;MaDate&#41;
    FROM   MaTable
    WHERE  MaDate <= CURRENT_TIMESTAMP
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 778
    Points
    30 778
    Par défaut
    Citation Envoyé par SQLpro
    Une solution valable pour tous (norme SQL)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT MIN&#40;MaDate&#41;
    FROM   MaTable
    WHERE  MaDate <= CURRENT_TIMESTAMP
    A +
    Euh... ce ne serait pas plutôt MAX(MaDate) ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  10. #10
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Merci à tous pour les réponses, vous vous êtes défoncés sur ce post .

    Néanmoins, j'ai tendance à m'appuyer sur la réponse SQL Pro (évidemment, il est bien placé pour le savoir).

    En fait, c'est grâce à cette date que je peux afficher des champs nom et prénom. Comment puis-je faire pour les sélectionner car je ne peux plus faire SELECT * ou encore SELECT nom, prenom

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie table Access vers PostgreSQL via une requête SQL
    Par V_inSe dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/07/2014, 14h53
  2. [MySQL] correspondance mot et synonyme via une requête SQL
    Par Lekno dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 19/05/2014, 17h59
  3. [MySQL] afficher une image via une requête sql et phpmyadmin
    Par hotman1313 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 28/03/2012, 23h27
  4. Génération fichier .csv via une requête SQL
    Par matnys dans le forum Import/Export
    Réponses: 5
    Dernier message: 12/12/2011, 23h03
  5. Réponses: 3
    Dernier message: 18/06/2005, 01h31

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