Page 1 sur 1

Probleme de Selection multiples

Posté : 16 févr. 2015, 15:13
par Invité
Bonjour a Tous.

toujours des problemes avec des selections avec des DateTime
j'ai une table qui comporte deux champs
timestamp et Mean
2015-01-22 17:11:38 0.0
2015-01-22 17:12:20 0.0
2015-01-22 17:12:34 0.0
2015-01-22 17:12:48 0.0
etc...

cette table contient pas mal d’éléments (108475 pour etre précis)
j'essaye de récupérer une table contenant tout les Mean et timestamp des plus proches des 15 minutes(0 , 15 , 30, 45).

Je ne vois pas comment faire cette requete j'ai essayer quelques truc mais rien ne semble tres probants

Deja un grand merci a ceux qui vont pouvoir m'aider

Re: Probleme de Selection multiples

Posté : 16 févr. 2015, 16:26
par @rthur
j'essaye de récupérer une table contenant tout les Mean et timestamp des plus proches des 15 minutes(0 , 15 , 30, 45).
Qu'entends-tu par "les plus proches des 15 minutes" ?
Il faut que tu définisses de façon précise ce que tu cherches : par exemple tous ceux qui sont entre XX:14:30 et XX:15:30 ?

Re: Probleme de Selection multiples

Posté : 16 févr. 2015, 17:29
par Invité
Bonjour et merci
en fait je cherche a avoir les lignes correspondante au plus proche de chaque 1/4 heure

par exemple si j'ai 12 lignes comme ca

"2015-16-02 14:59:58" 1
"2015-16-02 15:00:03" 2
"2015-16-02 15:14:15" 3
"2015-16-02 15:15:03" 4
"2015-16-02 15:29:57" 5
"2015-16-02 15:30:02" 6
"2015-16-02 15:45:40" 7
"2015-16-02 15:45:20" 8

la requete devrait me retourner
"2015-16-02 14:59:58" 1
"2015-16-02 15:15:03" 4
"2015-16-02 15:30:02" 6
"2015-16-02 15:45:20" 8


Voila. Je ne suis pas une grosse brute du SQL, j'ai encore essayer avec des UNION mais , pfffff, je sature un peu

Re: Probleme de Selection multiples

Posté : 16 févr. 2015, 20:08
par @rthur
C'est probablement faisable avec une seule requête complexe avec mySQL.
Perso, je pense que je ferrai ça en 2 étapes pour simplifier le travail, voila comment moi je le ferrai :

1) Faire une boucle sur tous les 1/4 d'heure d'une journée

2) Faire une requête SQL avec un TIMEDIFF() entre la date et heure stockée en bdd et la date et heure du quart d'heure étudié.

Cela va te donner l'écart entre la date étudiée et les dates stockées, avec des valeurs positives et négatives suivant que la date de la bdd soit avant ou après la date étudiée.
Il suffit d'ajouter un ABS() pour avoir la valeur absolue et donc tout en positif.
Et donc pour finir de faire un ORDER BY ton_champ_diff ASC LIMIT 1 pour récupérer la valeur la plus proche du quart d'heure étudié.

Re: Probleme de Selection multiples

Posté : 16 févr. 2015, 20:27
par @rthur
J'ai eu envie de tester ma 2ème étape et ça fonctionne :
SELECT *, ABS(TIMEDIFF(dateheure, '2015-02-16 15:00:00')) as delta FROM `ta_table` ORDER BY delta ASC LIMIT 1
Il ne te reste plus qu'à mettre ça dans une boucle for en PHP pour déterminer chaque quart d'heure étudié.
strtotime("+15 minutes") te seras probablement d'une grande aide ;)

Re: Probleme de Selection multiples

Posté : 17 févr. 2015, 18:58
par Invité
trop cool j'ai tester et ca fonctionne du feu de dieu... reste a implementer ca avec la boucle et le tour est joué...
Merci beaucoup... je reviendrais pour vous montrer le résultat