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

Requêtes et SQL. Discussion :

Requête création pour comparer des champs date entre eux


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Requête création pour comparer des champs date entre eux
    Bonjour,
    Je ne suis pas programmeur mais j'utilise Access en mode requête donc non "avancé".
    J'ai une table contenant 4 champs date par enregistrement, remplis avec des dates différentes (ou pas) : Date1,Date2,Date3,Date4
    J'aimerais, par une requête de création, exécuter une requête qui me donnera un 5 ème champ qui contiendra la date la plus récente entre ces 4 dates.
    Qq aurait la solution ?
    Merci à vous pour votre aide
    Jadydy

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    Bonsoir,

    des solutions dans la contribution : Pour trouver le Minimum ou le Maximum

  3. #3
    Candidat au Club
    Homme Profil pro
    Directeur
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci pour ta réponse rapide !

    J'ai trouvé ceci sur le lien que tu m'a envoyé :

    SELECT DatesAcomparer.date1, DatesAcomparer.date2, DatesAcomparer.date3, DatesAcomparer.date4, LeMinimum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4]) AS [Min], LeMaximum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4]) AS [Max]
    FROM DatesAcomparer;

    Est ce que tu penses pouvoir l'adapter ên requete de création pour que je puisse disposer d'un champ date5 "en dur" dans une table résultante qui contienne la date la plus récente ?

    désolé j'ai des connaisssances techniques très très limitées...

    merci !

    Jadydy

  4. #4
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    jadydy bonjour, fabien

    2 solutions,

    solution 1 :

    Si tu souhaites mettre à jour ta date5 dans une table résultante, il faut nécessairement avoir un identifiant qui te permets de rapprocher la série de ta table DatesAcomparer avec ta nouvelle table (une clé primaire avec un id auto-increment fera l'affaire). Dans ce cas nous utiliserons une requête de type insert.
    En admettant un champ id dans ta table DatesAcomparer et une table T_results composé d'un id et d'un champ date5, la requête proposée ressemblerait à celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO T_Results ( Id, Date5 )
    SELECT DatesAcomparer.Id, LeMaximum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4]) AS date5
    FROM DatesAcomparer;

    solution 2 :

    Si tu souhaites rajouter un nouveau champ dans ta table DatesAcomparer (Date5) permettant de récupérer la date MAX, une requête de ce type devrait résoudre ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE DatesAcomparer SET DatesAcomparer.date5 = LeMaximum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4]);
    Bonne continuation

    JimBolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour Fabien

    Merci pour ta réponse.

    J'essaye de suivre ce que tu dis. J'ai rajouté un champ date5 à ma table (appelée "tempo") en modifiant la structure puis j'ai fait la requete suivante (les champs date1 à 4 sont remplies avec de vraies données du type : 18/08/2011 11:38:27)

    UPDATE tempo SET tempo.date5 = LeMaximum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4]);

    Mais j'ai le message d'erreur : Fonction LeMaximum non définie dans l'expression

    Est ce que j'ai bien suivi ce qu'il fallait faire ?

    Merci !

    Jadydy

  6. #6
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    jadydy bonsoir,

    es tu sûr que ta fonction est bien définie dans les modules ?

    A défaut peux tu poster un exemple de ta base (édulcorée au besoin) afin que je puisse apporter les correctifs nécessaires

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  7. #7
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    jadydy,

    Tu trouveras ci-dessous la solution, la requête update permet de mettre à jour la date5 de la table tempo.

    maxdate.zip

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  8. #8
    Candidat au Club
    Homme Profil pro
    Directeur
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci c'est vraiment très très sympa !

    Avant d'executer ta requête j'avais une question (excuse moi d'avance du niveau peu "avancé" de mes questions...)

    Je vois que tu as 3 élements dans ton MDB :

    - requête mise à jour : Update_maxdate
    - requete de sélection : Lire_maxdate
    - module : M_calculs

    J'imagine que Lire_maxdate et M_calculs sont indispensables à l'execution de Update. Ceci veut dire que je doit les retransposer dans mon MDB à l'identique - en adaptant les noms de la table et des champs - je suppose ?
    Je crois comprendre que le module est à transposer tel quel (puisque sans référence sauf erreur au nom de la table ni aux champs date1 etc...) : je suppose que je peux faire un simple copier coller.

    Concernant Lire_maxupdate pour finir : en mode création je vois que tu utilise la 5 eme colonne de la requete pour y mettre : MaxDate: LeMaximum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4])
    mais sans référence aucune au champ date5 alors qu'il existe : le simple fait de placer ces instructions en 5 eme position suffit ?

    Encore merci !!

    Jadydy

  9. #9
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    jadydy,


    Avant d'executer ta requête j'avais une question (excuse moi d'avance du niveau peu "avancé" de mes questions...)

    Je vois que tu as 3 élements dans ton MDB :

    - requête mise à jour : Update_maxdate
    - requete de sélection : Lire_maxdate
    - module : M_calculs
    M_Calculs est le module permettant de lancer la fonction LeMaximum (cf. le lien de F-Leb : http://www.developpez.net/forums/d96...nimum-maximum/)

    La requête Lire_maxdate est indépendante de la requête Update. Je l'ai mise pour que tu vois comment la fonction LeMaximum peut être utilisée également dans une requête sélection.

    Concernant Lire_maxupdate pour finir : en mode création je vois que tu utilise la 5 eme colonne de la requete pour y mettre : MaxDate: LeMaximum([date1] & "|" & [date2] & "|" & [date3] & "|" & [date4])
    mais sans référence aucune au champ date5 alors qu'il existe : le simple fait de placer ces instructions en 5 eme position suffit ?
    Dans ce cas le champ Date5 ne sert à rien, puisque cette requête a pour but de montrer comment on récupère la valeur à l'affichage.

    JM
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  10. #10
    Candidat au Club
    Homme Profil pro
    Directeur
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Merci infiniment je regarde ça et je te fais un retour (positif sans aucun doute !!)
    encore merci et bon week end.
    Jadydy

  11. #11
    Candidat au Club
    Homme Profil pro
    Directeur
    Inscrit en
    Octobre 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Rebonjour Jim
    Ca marche presque.... il execute la requete mais il me dit à la fin et après le message : "vous allez mettre à jour N enregistrements" O/N

    Access n'a pas mis à jour XX champs à la suite d'un echec de conversion de type, 0 enregistrements à la suite de violation de clé, 0 enregistrement à la suite de violationde verrou et 0 enregistrments à la suite de violation de règle de validation.

    J'avais rajouté DISTINCTROW à l'update car j'avais un message avant et je me suis dit que ça pouvait aider.

    J'en profite pour te demander une autre requete ultra simple à mon avis :

    J'ai 3 enregistrements (même individu) avec la même clé (champ CLE pour l'exemple). Chacun de ces enregistrements qui concerne le même contact donc, possède une date différente dans le champ DATE. Comment créer une requete de création d'une nouvelle table qui ne prendra que l'enregistrement parmi les 3 qui aura la date la plus récente ? bien entendu ma vraie table possède de multiples individus qui sont présents N fois mais avec N dates différentes dans le champs date. Certains individus ne seront présents qu'une seule fois cependant.

    merci !!

  12. #12
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    jadydy,

    le DISTINCTROW n'a à priori aucun impact sur la mise à jour. Concernant l'échec de conversion, ta requête est en train de mettre à jour des champs qui sont dans un mauvais format (tes champs date dans ta table sont t'ils bien de champ date) ?

    Concernant le max date à trouver et compte tenu de ton exemple ou n dates sont à comparer de quelle date parles tu ?

    A défaut, prépares moi un exemple édulcoré de ta base et comparable à ce que tu souhaites réaliser, ce sera plus simple je pense.

    Si ta demande impose certaines règles, n'hésites pas à les présenter avec un ou deux exemples.

    Cldt

    Jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

Discussions similaires

  1. DATE_FORMAT pour comparer des dates
    Par Maryy dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 09/03/2008, 20h50
  2. regex pour comparer des dates, des chiffres, des nombres
    Par lex13 dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 06/07/2007, 11h51
  3. Probleme Pour Comparer Des Dates
    Par Domingo60 dans le forum VBScript
    Réponses: 7
    Dernier message: 25/04/2007, 09h33
  4. requêtes sur des champs date
    Par wiwi dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 03/02/2006, 14h14
  5. comparer des champs date time
    Par HULK dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/01/2005, 14h02

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