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 MySQL Discussion :

Trouver la 1ere date non existante


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut Trouver la 1ere date non existante
    Bonjour,

    voila mon porbleme

    j'ai une table avec les champ
    id, date, val1, val2

    qui contient des lignes comme celles qui suivent

    3,2009-04-12,1,0
    4,2009-04-15,0,1
    5,2009-04-09,0,0
    6,2009-04-22,1,0
    7,2009-04-20,1,1
    8,2009-04-21,1,1
    9,2009-04-25,0,1
    ...

    je voudrais faire une requete qui recherche le premier jour à partir d'aujourd'hui qui n'existe pas ou donc la valeur val1=0

    Par exemple, nous sommes le 2009-04-20, et le 1er jour a partir du 20 qui n'existe pas est le 2009-04-23

    Le resultat attendu est donc le 2009-04-23

    Avec la liste suivante,
    3,2009-04-12,1,0
    4,2009-04-15,0,1
    5,2009-04-09,0,0
    6,2009-04-22,0,0
    7,2009-04-20,1,1
    8,2009-04-21,1,1
    9,2009-04-25,0,1
    ...

    le resultat serait le 2009-04-22 puisque val1 du 22 est a 0.

    Je ne sais pas si c'est assez clair mais je galere dur pour trouver la reponse !!!
    Je voudrais eviter une boucle While affreuse qui ferais des requeste successive en incrementant la date !!! c'est pas tres propre et je suis sur qu'il y a plus simple

    Merci


  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    En résumé, tu cherches la première ligne future [ `date` > CURDATE() ] dont la colonne val1 contient 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT id 
    FROM la_table
    WHERE `date` > CURDATE()
    AND val1=0
    ORDER BY `date`
    LIMIT 1
    c'est ça ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    pas exactement, si c'etait juste ca serait effectivement facile.
    Les dates ne sont pas forcement deja inserer dans la table. Donc si elle existe ta requete repond bien a ma reponse mais il ne eput qu'elle n'ai pas encore insere.

    ex:

    si j'ai les dates suivante
    2009-04-22,1,1
    2009-04-25,1,1
    2009-04-23,1,1
    2009-04-21,1,1

    la reponse devrait etre le 2009-04-24.
    C'est la premiere valeur qui a soit un val1=0, soit qui correspond a un trou dans l'ordre chronologique des dates, et c'est sur derneire point que je galere !!!

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Alors peut-ête t'inspirer de ce post :
    http://www.developpez.net/forums/d72...es-meme-table/
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    j'eamine ca de plus pres ce soir et je vous tiens au courant

    merci

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    AU SECOURS !!!
    j'ai essaye avec le lien, mais je n'arrive a rien.

    Si je trouve que la date n'existe pas, ca veut dire que j'ai rien dans ma requete, donc je ne peux pas afficher de resultats !!!

    Je ne sais pas si je suis tres clair la !!!

  7. #7
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Si l'on résume ce que tu veux obtenir c'est la liste des jours sans lendemain, ou qui n'ont pas de val1 > 0.
    Je crois que tu peux t'en sortir plus facilement avec deux requêtes en UNION.
    La première recherchera tous les jours qui n'ont pas d'autre valeur que 0.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  lt1.id, lt1.`date`
    FROM la_table lt1
    WHERE val1=0
    ANS NOT EXISTS(SELECT * FROM latable as lt2 WHERE lt2.val1 >0 AND  lt1.`date`=lt2.`date`)
    La seconde tous les jours sans lendemain.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id,`date`
    FROM la_table
    WHERE NOT EXIST(SELECT *  FROM latable as lt2 WHERE lt2.`date`= ADDDATE(lt1.`date`, INTERVAL 1 DAY)
    UNION, tout seul, supprimera les éventuels doublons.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    ok je vais tester ca ce soir !! merci

    j'avais essayer un truc dans le genre mais j'ai du m'emmeler les pinceaux !!
    Je te tiens au courant

    En tout cas, merci pour ton aide


  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    ok !! ca marche super !!!

    par contre j'ai 2 requetes et je prends la dat la plus petite !!! pas tres propre !!!

    Tu entends quoi par l'union pour eviter les doublons ? c'est possible a faire par une seule requete ?

    j'ai fait ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select jour FROM $table_complet 
    WHERE complet='0' 
    AND DATEDIFF(now(),jour)<0 
    order by jour ASC limit 1
     
    et		  	
     
    select lt1.jour FROM $table_complet AS lt1 
    WHERE NOT EXISTS(SELECT id FROM $table_complet AS lt2 WHERE lt2.jour=DATE_ADD(lt1.jour,INTERVAL 1 DAY)) 
    AND DATEDIFF(now(),lt1.jour)<0 
    order by lt1.jour ASC limit 1
    En tout cas encore merci !! meme si ce n'est peut etre pas super propore, ca fonctionne et comme je mets un limit 1 c'est tres rapide !!

  10. #10
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT * FROM
    (SELECT jour FROM $table_complet 
    WHERE complet='0' 
    AND DATEDIFF(now(),jour)<0 
    ORDER BY jour ASC LIMIT 1
     
    UNION		  	
     
    SELECT lt1.jour FROM $table_complet AS lt1 
    WHERE NOT EXISTS(SELECT id FROM $table_complet AS lt2 
    WHERE lt2.jour=DATE_ADD(lt1.jour,INTERVAL 1 DAY)) 
    AND DATEDIFF(now(),lt1.jour)<0 
    ORDER BY lt1.jour ASC LIMIT 1)
    Par contre j'ai un doute sur l'acceptation de ORDER BY et LIMIT par MyQSL sur chacun des membres de la sous-requête.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    j'examinerai ca la semaine prochaine parce que la je ne vais plus avoir le temps !!!

    je te tiens au courant mais merci pour la solution


  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 9
    Points
    9
    Par défaut
    Desole pour le retard, je n'ai toujours pa eu le temps de tester, mon portable a rendu l'ame et je viens juste de recuperer mes donnees !!!!


Discussions similaires

  1. formatage de date non pris en compte
    Par robert_trudel dans le forum API standards et tierces
    Réponses: 15
    Dernier message: 28/11/2006, 17h44
  2. [PostGre SQL] recuperer date non rempli
    Par claireenes dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/07/2006, 10h59
  3. [VB.Net] cast du type 'DataRowview' en type 'Date' non valide
    Par badnane2 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 14/06/2006, 15h50
  4. Comment trouver la dernière date de modification d'un fichier
    Par je®ome dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 24/05/2006, 13h23
  5. Erreur Date non prise en compte
    Par priest69 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/02/2006, 23h46

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