ZuckBin Posté 23 Septembre 2008 Partager Posté 23 Septembre 2008 Bonjour, Après plusieurs heures, je me résigne à venir chercher de l'aide... Je souhaite sélectionner la date la plus récente dans une colonne DATE, par rapport à un ID identique unique. Voici la requête: SELECT DISTINCT RECORD, END_DATEFROM log_cbWHERE END_DATE < CURDATE( )AND END_DATE = ( max( `END_DATE` ) ) AS maxdateGROUP BY maxdateORDER BY END_DATE DESC Voici les données: END_DATE RECORD2008-09-05 1712008-09-01 1712008-09-18 1712008-07-03 170 Donc je souhaite obtenir ceci: END_DATE RECORD2008-09-18 1712008-07-03 170 Merci de votre aide, Cordialement. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 23 Septembre 2008 Partager Posté 23 Septembre 2008 En rajoutant un simple "limit 1", non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 23 Septembre 2008 Partager Posté 23 Septembre 2008 Hello, select max( end_date ) as maxDate from log_cb where record = 171 non ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 23 Septembre 2008 Auteur Partager Posté 23 Septembre 2008 En faite non, cela ne convient pas de faire un "LIMIT 1", je m'étais mal expliqué, je veux garder les autres ID. De plus, j'ai cette erreur: Invalid use of group function Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 23 Septembre 2008 Partager Posté 23 Septembre 2008 Si tu veux tous les ID, dans ce cas ce serait : select record, max( end_date ) as maxDatefrom log_cbgroup by record Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 23 Septembre 2008 Auteur Partager Posté 23 Septembre 2008 J'ai fait ca: SELECT RECORD, MAX(END_DATE) AS maxdate FROM log_cb WHERE END_DATE < CURDATE() GROUP BY RECORD Mais les dates ne sont pas du tout affichées. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 25 Septembre 2008 Auteur Partager Posté 25 Septembre 2008 J'ai résolu mon problème ainsi: SELECT DISTINCT RECORD, MAX(END_DATE) AS maxdate FROM log_cb WHERE END_DATE < CURDATE() GROUP BY RECORD ORDER BY maxdate Bye Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 25 Septembre 2008 Partager Posté 25 Septembre 2008 Le "DISTINCT" ne sert à rien ici vu que tu as déjà un "GROUP BY". Et du coup ormis le "ORDER" la requête est la même qu'avant... Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 8 Octobre 2008 Auteur Partager Posté 8 Octobre 2008 Bonjour, En faite, je croyais mon problème résolu, mais pas du tout. Voici la requête: SELECT RECORD, MAX(END_DATE) AS maxdate FROM log_cb WHERE END_DATE < CURDATE() GROUP BY RECORD ORDER BY maxdate Voici les résultats RECORD maxdate140 2008-10-04168 2008-10-05 Qu'alors voici les données réelles: END_DATE RECORD2008-10-04 1402008-11-04 1402008-10-05 1682008-11-05 168 Le résultat attendu est ceci: END_DATE RECORD2008-11-04 1402008-11-05 168 Merci de votre aide, Cordialement Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 8 Octobre 2008 Partager Posté 8 Octobre 2008 Il va falloir que tu enlèves la condition WHERE END_DATE < CURDATE(), alors. Aujourd'hui, CURDATE() vaut 2008-10-08. Ta requête ne peux ressortir que des résultats inférieurs à cette date. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 8 Octobre 2008 Auteur Partager Posté 8 Octobre 2008 En faite, je suis plus sur d'avoir pris le problème dans le bon sens. Je vais re expliquer pour que l'on puisse y voir clair. J'ai un prestataire qui m'envoie des infos tout les jours via un webservice, passage de variables via un url. Je récupère les infos et je les insèrent dans ma base de donné log_cb, d'où les enregistrements:END_DATE qui est la fin d'un abonnement, et RECORD qui est un identifiant unique pour mes membres. Je souhaite exécuter un script quotidien via cron qui va vérifier si END_DATE < à la date du jour: si c'est le cas, je met à jour mes enregistrements et je met fin à l'abonnement. Dans le cas contraire, on ne fais rien. Voila Lien vers le commentaire Partager sur d’autres sites More sharing options...
tellaw Posté 8 Octobre 2008 Partager Posté 8 Octobre 2008 (modifié) Tu considères un abo terminé quand la end-date la plus grande d'un reccord est plus petite que la date du jour ? Modifié 8 Octobre 2008 par tellaw Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 8 Octobre 2008 Auteur Partager Posté 8 Octobre 2008 (modifié) Oui, chaque RECORD est associé à X dates. Je ne veux retenir que la plus grande des END_DATES par RECORD Modifié 8 Octobre 2008 par ZuckBin Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 8 Octobre 2008 Partager Posté 8 Octobre 2008 J'ai juste survolé, mais à priori ce qu'il te faut c'est remplacer ton WHERE par un HAVING maxdate < curdate() (à placer après le group by) Lien vers le commentaire Partager sur d’autres sites More sharing options...
tellaw Posté 8 Octobre 2008 Partager Posté 8 Octobre 2008 Oui, regarde la page suivante, c'est probablement un bonne piste : http://sql.1keydata.com/fr/sql-having.php SELECT RECORD, END_DATE FROM log_cb GROUP BY RECORD HAVING max(END_DATE) < CURDATE() ca donne quoi ca ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 8 Octobre 2008 Auteur Partager Posté 8 Octobre 2008 (modifié) SELECT RECORD, END_DATE FROM log_cb GROUP BY RECORD HAVING max(END_DATE) < CURDATE() Bingo ! Ca fonctionne... Merci pour votre aide Résolu.... Modifié 8 Octobre 2008 par ZuckBin Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 8 Octobre 2008 Partager Posté 8 Octobre 2008 malheureux, remplace ton end_date par un max(end_date), sinon tu vas avoir de bien mauvaises surprises... Là MySQL te retourne un end_date "au hasard" parmi tous ceux possibles. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 9 Octobre 2008 Auteur Partager Posté 9 Octobre 2008 C'est corrigé, merci Kioob Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant