CREATE TABLE IF NOT EXISTS `suivi_demande` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`INE` char(11) NOT NULL,
`decision_ancien` char(2) DEFAULT NULL,
`decision_nouvelle` char(2) DEFAULT NULL,
`date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Cette table me permet de suivre l'évolution du code "INE". Pour cela je stocke dans "decision_ancien" la valeur actuelle et dans "decision_nouvelle" la nouvelle valeur et je mets la date du jour dans "date". A chaque modification de la valeur "INE", j'ai une nouvelle ligne. Les évolutions des codes décision sont :
A) 0 -> 10
B) 10 -> 15
Le nombre de possibilité est donc limité.
Je souhaite connaitre le temps moyen de mise à jour de la valeur "INE". Pour cela je dois calculer pour chaque entrée la différence de date (decision_nouvelle - decision_ancien) et faire la moyenne de toutes les entrées.
Pour le moment j'arrive à sélectionner la date A) :
SELECT *
FROM suivi_demande
WHERE decision_ancien = 0 AND decision_nouvelle = 10
La date B) :
SELECT *
FROM suivi_demande
WHERE decision_ancien = 10 AND decision_nouvelle = 15
C'est là ou je coince, je n'arrive pas à mixer les deux... Si quelqu'un pouvait m'aider...
Si je comprends bien, pour chaque INE, on a une chaine de suivi_demande où le decision_nouvelle de l'un est le decision_ancien du suivant ?
Si (et seulement si ) la chaine est ininterrompue, tu peux associer un suivi_demande avec le suivi_demande suivant via une jointure :
SELECT oldone.INE, oldone.date, newone.date
FROM suivi_demande oldone
JOIN suivi_demande newone
ON oldone.INE = newone.INE AND
oldone.decision_nouvelle = newone.decision_ancien
Pour avoir les moyennes de chaque INE, il est possible de regrouper les lignes par INE et d'utiliser la fonction AVG qui calculera la moyenne (je suis pas sur de ce dernier point, c'est à tester ) :
SELECT oldone.INE, AVG(newone.date - oldone.date) AS moyenne
FROM suivi_demande oldone
JOIN suivi_demande newone
ON oldone.INE = newone.INE AND
oldone.decision_nouvelle = newone.decision_ancien
GROUP BY oldone.INE
Si le AVG fonctionne pas avec une expression dedans, il faudra en passer par un calcul manuel avec des SUM et COUNT (pour avoir le nombre de changement de INE), en espérant que cela fonctionne avec des dates.
"'But I don't want to go among mad people,' said Alice. 'Oh, you can't help that,' said the cat. 'We're all mad here.'" Lewis Carroll
Je ne sais pas si la requête fonctionne, mais pour soustraire 2 dates il vaut mieux utiliser DATEDIFF(date1, date2) qui retourne le nombre de jours, où date1 et la date la plus grande, et date2 la date la plus petite (pour avoir un résultat positif).
Je teste les propositions et je vous tiens au courant !
Requête sur plusieurs champs dans une même table
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
"'But I don't want to go among mad people,' said Alice. 'Oh, you can't help that,' said the cat. 'We're all mad here.'" Lewis Carroll