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

Développement SQL Server Discussion :

Sélection d'une date en SQL


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Par défaut Sélection d'une date en SQL
    Bonjour,

    Je suis actuellement en stage dans une entreprise, et je dois développer certaines requêtes en SQL.
    L'une d'elle me pose problème. Je dois récupérer un enregistrement en fonction d'une date. Jusque là, aucun problème.
    Mais je dois améliorer cette requête en récupérant un enregistrement en fonction de la date choisie par un utilisateur. Or, cette date n'existe pas forcément dans la base, il faut alors récupérer la date la plus proche.

    Par exemple :
    05/05/2003 8:00:00
    05/05/2003 9:00:01
    05/05/2003 10:00:00
    05/05/2003 10:59:58
    05/05/2003 12:00:00

    Si l'utilisateur tape comme date '05/05/2003 9:00:00', je dois récupérer la date "05/05/2003 9:00:01"
    Et si l'utilisateur tape comme date "05/05/2003 11:00:00", , je dois récupérer la date " 05/05/2003 10:59:58"

    J'ai essayé plusieurs requêtes, mais sans aucun succès ...
    Merci pour votre aide !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    Vous pouvez vous baser sur la valeur absolue de la différence entre la date en parametre et celles de votre colonne date.
    En admettant que :1 soit votre parametre, vous pouvez essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select max(colonne_date) KEEP (DENSE_RANK FIRST ORDER BY abs(:1-colonne_date)) ASdate_retenue
    from ta_table

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Par défaut
    J'ai tenté ta réponse Snipah, mais cela ne marche pas.
    Après avoir modifié les noms des variables pour que ta requête fonctionne,
    j'ai une erreur qui indique :
    Ligne 1 : syntaxe incorrecte vers 'DENSE_RANK'.
    A quoi sert précisément ce DENSE_RANK ?
    J''ai cherché sur Internet mais les explications restent assez floues

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 135
    Par défaut
    Toutes les fonctionnalités définies dans la norme ANSI du langage SQL ne sont pas implémentées par tous les SGBD.
    Quel SGBD utilises-tu ?
    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.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    DENSE_RANK assigne un rang à une ligne selon le critère spécifié dans ORDER BY.
    Associé à KEEP ... FIRST, on ne conservera le premier.
    Précisez votre SGBD, s'il n'implémente pas KEEP il faudra trouver une autre solution.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Par défaut
    Je travaille sur la version 8.0 de Microsoft SQL Enterprise Manager.
    Mon SGBD serait donc du SQL Server

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Je travaille sur la version 8.0 de Microsoft SQL Enterprise Manager.
    Mon SGBD serait donc du SQL Server
    Vous avez Enterprise Manager donc la version de votre SQL Server est la version 2000, ou 8, effectivement.

    Nous pouvons tout simplement écrire une petite procédure stockée, en se passant des coûteuses fonctions de fenêtrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE PROCEDURE Ps_getTupleProcheDate
    	@uneDate DATETIME
    AS
    BEGIN
    	DECLARE	@dateProche DATETIME
    	SELECT @dateProche = MIN(ABS(DATEDIFF(second, @maDate, maColonneDate)))
    	FROM dbo.maTable
     
    	SELECT mesColonnes
    	FROM dbo.maTable
    	WHERE maColonneDate = @dateProche
    END
    @++

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

Discussions similaires

  1. Sélection d'une date dans un calendrier
    Par navis84 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 17/04/2012, 17h12
  2. Pb de syntaxe SQL en VBA sur la sélection d'une date
    Par rch05 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 18/09/2010, 17h58
  3. Réponses: 3
    Dernier message: 31/08/2006, 15h28
  4. Réponses: 6
    Dernier message: 18/04/2006, 13h11
  5. Comment comaprer un timestamp et une date en SQL
    Par Samuel25_t dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2005, 21h38

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