Aller au contenu

Date la plus récente...


Sujets conseillés

Posté

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_DATE
FROM log_cb
WHERE END_DATE < CURDATE( )
AND END_DATE = ( max( `END_DATE` ) ) AS maxdate
GROUP BY maxdate
ORDER BY END_DATE DESC

Voici les données:

END_DATE		RECORD
2008-09-05 171
2008-09-01 171
2008-09-18 171
2008-07-03 170

Donc je souhaite obtenir ceci:

END_DATE		RECORD
2008-09-18 171
2008-07-03 170

Merci de votre aide,

Cordialement.

Posté

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

Posté

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.

Posté

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 ;)

  • 2 semaines plus tard...
Posté

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 	maxdate
140 2008-10-04
168 2008-10-05

Qu'alors voici les données réelles:

END_DATE 	RECORD
2008-10-04 140
2008-11-04 140
2008-10-05 168
2008-11-05 168

Le résultat attendu est ceci:

END_DATE 	RECORD
2008-11-04 140
2008-11-05 168

Merci de votre aide,

Cordialement

Posté

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.

Posté

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 :)

Posté (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é par tellaw
Posté (modifié)

Oui, chaque RECORD est associé à X dates.

Je ne veux retenir que la plus grande des END_DATES par RECORD

Modifié par ZuckBin
Posté

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)

Posté (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é par ZuckBin
Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...