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 :

Recherche les dates les plus anciennes de 2 mois [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut Recherche les dates les plus anciennes de 2 mois
    Bonsoir a tous
    Il y a quelque temps j'ai fais appelle a vos connaissance
    ET je remercie encore FSMREL pour sa compréhension
    VOICI LE RESULTAT DE MA REQUETE QUI
    RECHERCHE UN PRIX AVEC LA DATE LA PLUS RECENTE
    FICHIER GESTmat REQUETE REQmat
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.IDmat, CODstat & ' - ' & ref AS Code, des AS DESIGNATION, T.DateMAJ, TABprix.prix
    FROM (SELECT TABmat.IDmat, max(TABprix.maj) AS DateMAJ, ref, des, TABstat.CODstat AS CODstat FROM  TABprix INNER JOIN (TABmat INNER JOIN TABstat ON TABmat.stat = TABstat.IDstat) ON TABmat.IDmat = TABprix.mat 
    GROUP BY TABmat.IDmat, TABmat.ref,TABmat.des, TABstat.CODstat)  AS T 
    INNER JOIN TABprix ON TABprix.mat = T.IDmat AND TABprix.maj = T.DateMAJ
    UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, '/', 0
    FROM   TABmat  
    INNER JOIN TABstat ON TABmat.stat = TABstat.IDstat
    WHERE  NOT EXISTS (SELECT '' FROM TABprix WHERE TABmat.IDmat = TABprix.mat)
    ORDER BY Code;
    CODE QUI EST AU POIL

    J'ai voulu faire une requête avec cette requête ( dynamique donc plus ou moins virtuel ci j'ai bien compris DESOLE POUR FSMREL je travail encore dessus)
    MON BUT EST DE
    Faire une requête qui me sélectionne les dates qui ont plus de deux mois d'ancienneté donc 60 jours ( POUR DIRE QUE LE PRIX A PLUS DE 60 JOURS ET QU'IL EST TEMPS DE LE METTRE A JOUR )
    avec la formule SQL suivante MAIS PAS DE RESULTAT
    J'ai même essaye de l'insère par si et part la dans une copie de la requête que vous voyez
    POURTANT avec une table cela marche
    Je pense vu que la requête a créer une table virtuel

    EST CE QUE LES CHAMPS ON LA MEME PROPRIETE DE TYPE DATE QUE LES TABLES
    DESOLE POUR LE ROMAN JE CHERCHE ENCORE MES MOTS VIVEMENT LE WEEK END

    Cela dépasse mes petites compétences

    MERCI DE M'AIDER CAR JE NAGE DANS LE BONHEUR QUI ME SEMBLE BIEN loin LOL

  2. #2
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonjour a tous
    Je m'excuse pour mon premier message incompréhensible
    Pour faire plus simple, j'ai une requête qui me fait le listing de toutes mes tables dont voici le résultat
    CODE-DÉSIGNATION-DATEMAJ-PRIX
    1-1111-vide-0.00€
    2-2222-01/01/15-1.00€
    3-3333-26/07/15-2.00€

    De cette requête je voudrais récupérer tous les enregistrements qui contiennent des dates et toutes les dates qui ont une ancienneté de plus de deux mois et obtenir le résultat suivant

    CODE-DÉSIGNATION-DATEMAJ-PRIX
    2-2222-01/01/15-1.00€

    Voici ma requête

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT REQmat.Code, REQmat.DESIGNATION, REQmat.DateMAJ, REQmat.prix
    FROM REQmat
    WHERE (((REQmat.DateMAJ)<>'')) AND (((REQmat.DateMAJ)<Date()-60));

    Mais voici le résultat obtenu

    CODE DESIGNATION DATEMAJ PRIX
    2 2222 01/01/15 1.00€
    3 3333 26/07/15 2.00€

    Merci

  3. #3
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,

    Dans ton éditeur de requête, la partie où tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (((REQmat.DateMAJ)<Date()-60));
    Remplace la par quelque chose du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DiffDate("j";REQmat.DateMAJ;ajDate("j";-60;Date()))<0
    Je ne sais plus si c'est la bonne syntaxe en SQL mais cela te permettra de confirmer le type d'écart pris en compte.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonjour et merci pour ta réponse
    je vois cela en soirée

  5. #5
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir
    Désolé pour ma réponse tardive
    malheureusement j'ai un message " erreur de syntaxe "

    J'ai une question
    Pourquoi j' arrive a le faire avec une table et non avec cette requête dite dynamique

    merci

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir a tous
    J'ai fais plusieurs testes avec une table cela marche
    après quelque manipulations je me suis rendu compte que résultat final des requêtes quelque soit la façon de faire

    il ne garde pas le format date

    Si je me trompe merci de me le dire


    Merci a Gado2600

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir py86acces,


    Dans la requête REQmat, voyons la ligne :

    UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, '/', 0

    La constante « '/' » y remplace Null, mais elle censée être du type Date dès lors que la colonne DateMAJ trempe dans des opérations de calcul.

    Par exemple, le calcul DateDiff("d", DateMAJ, Date()) >= 60 plante parce que « '/' » n’est pas du type Date.

    Pour éviter le plantage, plusieurs possibilités :

    — Dans la requête, REQmat, remplacer la constante « '/' » par Null :

    UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, Null, 0


    — Ou bien remplacer la constante « '/' » par l’« infini » :

    UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, '31/12/9999', 0


    — Ou bien opérer sur une requête REQmat2 ne comportant que le 1er SELECT de REQmat ;


    — Ou bien définir les requêtes suivantes :


    (1) R1, qui permet de ne conserver que les lignes où la colonne DateMAJ ne contient que des dates (la constante 'pipo' a pour rôle de faire en sorte que l’optimiseur trop zélé n’aille pas encore récupérer le 2e SELECT) :

    
    SELECT idmat, Code, DESIGNATION, DateMAJ, prix, 'pipo'
    FROM   REQmat
    WHERE  IsDate(DateMAJ);
    
    
    (2) R2 qui permet de produire le résultat final à partir de R1 :

    
    SELECT idmat, Code, DESIGNATION, DateMAJ, prix
    FROM   R1
    WHERE DateDiff("d", DateMAJ, Date()) >= 60 ;
    
    

    — Ou encore n'utiliser qu'une requête (regroupant R1 et R2) :

    
    SELECT idmat, Code, DESIGNATION, DateMAJ, prix
    FROM   (SELECT idmat, Code, DESIGNATION, DateMAJ, prix, 'pipo' 
            FROM   REQmat 
            WHERE IsDate(DateMAJ))  AS D
    WHERE DateDiff("d", DateMAJ, Date()) >= 60 ;
    
    

    Il y a certainement d’autres solutions. En tout cas, voyez si quelque chose ci-dessus vous convient...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #8
    Membre expérimenté Avatar de bernardmichel
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2004
    Messages
    1 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 181
    Points : 1 591
    Points
    1 591
    Par défaut
    Bonsoir !

    N'ayant pas les tables à ma disposition, il ne m'est pas possible de tester ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DESIGNATION, Datemaj, Prix
    FROM (SELECT T.IDmat, CODstat & ' - ' & ref AS Code, des AS DESIGNATION, T.DateMAJ, TABprix.prix
    FROM (SELECT TABmat.IDmat, max(TABprix.maj) AS DateMAJ, ref, des, TABstat.CODstat AS CODstat FROM  TABprix INNER JOIN (TABmat INNER JOIN TABstat ON TABmat.stat = TABstat.IDstat) ON TABmat.IDmat = TABprix.mat 
    GROUP BY TABmat.IDmat, TABmat.ref,TABmat.des, TABstat.CODstat)  AS T 
    INNER JOIN TABprix ON TABprix.mat = T.IDmat AND TABprix.maj = T.DateMAJ
    UNION ALL SELECT idmat,TABstat.CODstat & ' - ' & ref,TABmat.des, '/', 0
    FROM   TABmat  
    INNER JOIN TABstat ON TABmat.stat = TABstat.IDstat
    WHERE  NOT EXISTS (SELECT '' FROM TABprix WHERE TABmat.IDmat = TABprix.mat))
    WHERE (((REQmat.DateMAJ)<Date()-60));
    Je te laisse donc le soin de le faire... en espérant :-)

    Cordialement.
    P.S. Du fait que la requête pose une condition d'extraction de date, automatiquement le résultat ne sera ni vide, ni null. J'ai donc supprimé le :
    Nous n'héritons pas la Terre de nos ancêtres, nous l'empruntons à nos enfants, prenons-en soin !
    (proverbe amérindien)

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Août 2013
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2013
    Messages : 186
    Points : 91
    Points
    91
    Par défaut
    Bonsoir et merci pour vos réponse
    pour ma part la solution de fsmrel de la création d'une requête (regroupant R1 et R2) marche très bien
    Je viens juste de voir la réponse de bernardmichel que suis en train d'étudier
    Je tenais a remercier

    gado2600
    fsmrel
    bernardmichel

    pour m'avoir répondu

    Bonne soirée a tous

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

Discussions similaires

  1. [AC-2010] recherche par date la plus ancienne
    Par py86acces dans le forum Access
    Réponses: 20
    Dernier message: 15/07/2015, 23h35
  2. Réponses: 2
    Dernier message: 25/09/2010, 09h38
  3. Rechercher la date la plus ancienne
    Par Syrya dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/04/2008, 17h17
  4. Comment garder les dates les plus récentes?
    Par nikobell dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/06/2007, 11h06
  5. requete : selectioner les dates les plus récentes
    Par aujero dans le forum Access
    Réponses: 6
    Dernier message: 01/03/2006, 11h40

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