|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 4 ![]() |
Bonjour,
Malgré des heures de recherche, je n'arrive pas à trouver de solution pour finaliser une requête. Voilà j'ai une table avec 2 champs : counter, time contenant par exemple : Citation:
Par exemple pour counter = 5 le 23/02/2011 : 2 enrgts et le 1/03/2011 : 3 enregts. Soit une différence de 1 Si un enregistrement est présent à une date mais pas à une autre, alors il ne faut le prendre en considération. L'idéal serait de récupérer un tableau du genre : counter, date1, hits1, date2, hits2 que je pensais peut être récupérer avec cette requête : Code :
SELECT FROM_UNIXTIME(C1.time,'%Y-%m-%d') AS date1, FROM_UNIXTIME(C2.time,'%Y-%m-%d') AS date2, C1.counter, COUNT(C1.counter) AS hits1, COUNT(C2.time) AS hits2 FROM CC_visitor C1 INNER JOIN CC_visitor C2 ON C1.counter=C2.counter WHERE (C2.time BETWEEN 1298934000 AND 1299020400) AND C1.time BETWEEN 1298415600 AND 1298502000 GROUP BY counter ORDER BY COUNTER J'essaye donc avec un UNION : Code :
J'ai trouvé une requête qui me donne bien tous les counter présents au 2 dates mais ca ne répond pas à me demande : Code :
Voilà si quelqu'un d'entre vous est suffisamment calé pour m'aider, ca sera avec plaisir ! |
|||||
|
|
00
|
|
|
#2 | ||||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Essaie avec cette requête (j'ai viré les from_unixtime car je gère des dates mais si tu en as besoin rajoutes les):
Code :
Code :
|
||||
|
|
10
|
|
|
#3 | |||
|
Invité de passage
![]() Inscription : mars 2011 Messages : 4 ![]() |
Merci !!!
J'avoue ne pas bien comprendre cette requête. Au moins ca me rassure, ca prouve que ca n'était pas si simple que ca ! Cependant, je ne suis pas sûr de l'endroit où rajouter les clauses WHERE afin de faire les tests de dates : D'après ce que je comprends, c'est dans la sous requête : Code :
Citation:
|
|||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
La requête ne renvoie des résultats qu'avec des dates distinctes chez moi car j'ai une colonne date sans heures minutes secondes.
Utilise : count(DISTINCT FROM_UNIXTIME(time,'%Y-%m-%d')) dans le select et le group by Sinon, les filtres sont en fait à placer dans la sous requête et dans la requête principale. D'abord dans la sous requête pour ne récupérer que les counter ayant plusieurs dates dans la tranche donnée. Puis dans la requête principale si tu souhaites afficher le max(date) et le min(date), sinon ce n'est pas nécessaire. Concernant la requête, l'astuce du sum(case when t.time = t1.max_time then 1 end) AS nb_max_date J'aurais pu rajouter case when t.time = t1.max_time then 1 ELSE 0 end, mais par défaut c'est ELSE NULL et sum ne tient pas compte des NULLs. En gros l'idée est ajoute 1 à la variable nb_max_date chaque fois que t.time = t1.max_time. Tu peux utiliser count à la place de sum si tu trouves count plus explicite. La requête deviendrait donc : Code :
|
||
|
|
10
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 4 ![]() |
Merci pour tout, ca marche au poil ! Et chapeau pour la compétence !
Une question néanmoins, est-ce qu'il serait possible de rajouter une colonne dans le résultat qui donne la différence entre NB_MAX_DATE NB_MIN_DATE, voire même un calcul comme (NB_MAX_DATE-NB_MIN_DATE) / 7 ? alexandre |
|
|
00
|
|
|
#6 | ||||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Code :
Code :
|
||||
|
|
10
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mars 2011 Messages : 4 ![]() |
Fabuleux !!!!
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
facile ! vote pour une de mes réponses (ou toutes
[edit] Merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com