trier valeurs par heure

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : trier valeurs par heure

Re: trier valeurs par heure

par ouckileou » 07 févr. 2012, 01:06

Ce serait bien de commencer a utiliser les balises

Code : Tout sélectionner

pour encadrer le SQL aussi, histoire que ca devienne lisible.

Re: trier valeurs par heure

par xTG » 05 févr. 2012, 15:48

Je suis pas un as du SQL c'est donc peut être facilement optimisable mais je saurais pas faire mieux. :/

Si dans la requête tu remplaces 36 par 35 tu as quoi comme jeu de résultats ?

Re: trier valeurs par heure

par winch20010 » 05 févr. 2012, 13:44

je spam un peu ...
j'ai trouvé le probleme de la fonction non trouvée. c'était une erreur de syntaxe . DAYOFYEAR(FROM_UIXTIME --> manquait le N a UNIX

maintenant, la variable t2.timestamp n'est pas visible dans le WHERE a la fin de la requete.
la requete est aussi très lente et me retourne :
rec_time timestamp Croissant valeur_hier valeur_aujourdhui
00:00:04 1325372404 NULL 22
00:02:04 1325372524 NULL 22
00:04:03 1325372643 NULL 22
00:06:02 1325372762 NULL 23
00:08:03 1325372883 NULL 21
00:10:03 1325373003 NULL 21


script :
SELECT rec_time, timestamp, (
SELECT Iinst
FROM teleinfo t2
WHERE HOUR( FROM_UNIXTIME( t2.timestamp ) ) = HOUR( FROM_UNIXTIME( t1.timestamp ) )
AND YEAR( FROM_UNIXTIME( t2.timestamp ) ) = YEAR( FROM_UNIXTIME( t1.timestamp ) )
AND DAYOFYEAR( FROM_UNIXTIME( t2.timestamp ) ) = DAYOFYEAR( FROM_UNIXTIME( t1.timestamp ) ) -1
) AS valeur_hier, Iinst AS valeur_aujourdhui
FROM teleinfo t1
WHERE DAYOFYEAR( CURRENT_DATE( ) ) = ' 36'/* jour d'aujourd'hui */
AND YEAR( FROM_UNIXTIME( t1.timestamp ) ) = YEAR( CURRENT_DATE( ) ) /* cette année */
ORDER BY timestamp ASC

Re: trier valeurs par heure

par winch20010 » 05 févr. 2012, 13:27

désolé, j'ai oublié...

j'ai aussi #1054 - Unknown column 't2.timestamp' in 'where clause' comme erreur si je modifie un peu le code :


Select rec_time,timestamp,(SELECT Iinst
FROM teleinfo t2
WHERE FROM_UNIXTIME( t2.timestamp ) = FROM_UNIXTIME( t1.timestamp )

) AS valeur_hier,
Iinst AS valeur_aujourdhui
from teleinfo t1
WHERE DAYOFYEAR(FROM_UNIXTIME(t2.timestamp)) = DAYOFYEAR(CURRENT_DATE()) /* jour d'aujourd'hui */
AND YEAR(FROM_UNIXTIME(t1.timestamp)) = YEAR(CURRENT_DATE()) /* cette année */
ORDER BY timestamp ASC

Re: trier valeurs par heure

par winch20010 » 05 févr. 2012, 13:23

je me rend compte que l'erreur #1305 - FUNCTION Test.FROM_UIXTIME does not exist n'est presente que quand j'ai toute la chaine dans l'imbrication
WHERE HOUR(FROM_UNIXTIME(t2.timestamp)) = HOUR(FROM_UNIXTIME(t1.timestamp)) /* comparaison sur l'heure */
AND DAYOFYEAR(FROM_UNIXTIME(t2.timestamp)) = DAYOFYEAR(FROM_UIXTIME(t1.timestamp)) - 1 /* différence d'une journée (numéro du jour dans l'année) */
AND YEAR(FROM_UNIXTIME(t2.timestamp)) = YEAR(FROM_UNIXTIME(t1.timestamp)) /* comparaison de l'année */


si je ne mets que le WHERE (et que j'enleve le HOUR), le resultat n'est pas bon, mais je n'ai plus d'erreur.

Re: trier valeurs par heure

par winch20010 » 05 févr. 2012, 12:59

oui je confirme, c'"est bien mysql :
Your MySQL connection id is 2024
Server version: 5.5.17-4ubuntu6 (Ubuntu)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

j'essaie, j'essaie :)

Re: trier valeurs par heure

par xTG » 05 févr. 2012, 12:15

Vu que tu n'as pas précisé sur quel SGBD tu tournais je suis parti du principe que c'était MYSQL.
Ce qui n'est pas le cas vu le message d'erreur.
Quel SGBD utilises-tu ?

Re: trier valeurs par heure

par winch20010 » 05 févr. 2012, 11:44

merci pour ton code.

j'ai un probleme pour l'executer. je l'ai modifié avec mes attributs.
SELECT rec_time, (
SELECT Iinst
FROM teleinfo AS t2
WHERE HOUR(FROM_UNIXTIME(t2.timestamp)) = HOUR(FROM_UNIXTIME(t1.timestamp)) /* comparaison sur l'heure */
AND DAYOFYEAR(FROM_UNIXTIME(t2.timestamp)) = DAYOFYEAR(FROM_UIXTIME(t1.timestamp)) - 1 /* différence d'une journée (numéro du jour dans l'année) */
AND YEAR(FROM_UNIXTIME(t2.timestamp)) = YEAR(FROM_UNIXTIME(t1.timestamp)) /* comparaison de l'année */
) AS valeur_hier,
Iinst AS valeur_aujourdhui
FROM teleinfo AS t1
WHERE DAYOFYEAR(FROM_UNIXTIME(t2.timestamp)) = DAYOFYEAR(CURRENT_DATE()) /* jour d'aujourd'hui */
AND YEAR(FROM_UNIXTIME(t1.timestamp)) = YEAR(CURRENT_DATE()) /* cette année */
ORDER BY timestamp ASC

l'erreur, c'est :
#1305 - FUNCTION Test.FROM_UIXTIME does not exist
/*Test = nom de la base de donnee

j'ai lance une petite requete comme ca, et je n'ai pas d'erreur
SELECT rec_time, Iinst
FROM teleinfo AS t2
WHERE HOUR( FROM_UNIXTIME( t2.timestamp ) ) LIKE '1260645075'
ORDER BY timestamp ASC
LIMIT 0 , 30


que se passe t'il ? merci encore

Re: trier valeurs par heure

par xTG » 05 févr. 2012, 09:44

Donc c'est bien par minutes et non par heure comme tu le dis. :)

Essais ceci :
SELECT rec_time, (
  SELECT valeur 
  FROM teleinfo as t2 
  WHERE HOUR(FROM_UNIXTIME(t2.timestamp)) = HOUR(FROM_UNIXTIME(t1.timestamp)) /* comparaison sur l'heure */
  AND DAYOFYEAR(FROM_UNIXTIME(t2.timestamp)) = DAYOFYEAR(FROM_UIXTIME(t1.timestamp)) - 1 /* différence d'une journée (numéro du jour dans l'année) */
  AND YEAR(FROM_UNIXTIME(t2.timestamp)) = YEAR(FROM_UNIXTIME(t1.timestamp)) /* comparaison de l'année */
  ) AS valeur_hier,
  valeur AS valeur_aujourdhui
  FROM teleinfo AS t1
  WHERE DAYOFYEAR(FROM_UNIXTIME(t2.timestamp)) = DAYOFYEAR(CURRENT_DATE()) /* jour d'aujourd'hui */
  AND YEAR(FROM_UNIXTIME(t1.timestamp)) = YEAR(CURRENT_DATE()) /* cette année */
  ORDER BY timestamp ASC
(non testé)

Re: trier valeurs par heure

par winch20010 » 05 févr. 2012, 08:48

j'essaie de reclarifier le tout :)


voici ce que j'ai :

timestamp rec_date rec_time Valeur
xxxxxxxx 03022012 10:00 27
xxxxxxxx 03022012 10:02 24
xxxxxxxx 03022012 10:04 26
xxxxxxxx 04022012 10:00 21
xxxxxxxx 04022012 10:02 22
xxxxxxxx 04022012 10:03 28

voici ce que je veux en sortie de ma requete sql (rec_date_today et rec_date_yest sont juste pour l'exemple. je n'en n'ai pas besoin en fait pour le resultat) :
timestamp rec_date_today rec_date_yest rec_time ValeurToday ValeurYest
xxxxxxxx 04022012 03022012 10:00 21 27
xxxxxxxx 04022012 03022012 10:02 22 24
xxxxxxxx 04022012 10:03 28
xxxxxxxx 03022012 10:04 26


merci d'avance !

Re: trier valeurs par heure

par winch20010 » 04 févr. 2012, 21:00

Je veux sortir les enregistrements de aujourdh'ui et d'hier regroupes
A 2 h quels sont les valeurs que j'ai eu hier et aujourd'hui


Merci

Re: trier valeurs par heure

par xTG » 04 févr. 2012, 20:14

Il faut utiliser une clause ORDER BY ? Car ce que tu présentes n'est pas un groupement en fait... Ou alors par minute ?
Ou alors ton but est de sortir tous les enregistrements à 2h ??

trier valeurs par heure

par winch20010 » 04 févr. 2012, 19:12

Bonjour,

je suis en train de créer un outil de monitoring (avec amcharts), et j'ai besoin d'une requete sql qui me groupe les valeurs par "heure"

je n'ai qu'une table de type :
timestamp,rec_time,rec_date,Iinst

je voudrai en 1 seule requete sortir tous les enregistrements du jour et de la veille, et de grouper ces resultats par heure.

voici les 2 requetes qui me sortent les valeurs pour aujourd'hui et pour hier.
SELECT Iinst as Iinst,timestamp,rec_date,rec_time FROM teleinfo WHERE timestamp BETWEEN "1328313600" AND "1328399999"
SELECT Iinst as Iinst2,timestamp,rec_date2_rec_time FROM teleinfo WHERE timestamp BETWEEN "1328227200" AND "1328313599"

il faudrait :
...
heure rec_date rec_date2 Iinst Iinst2 Timestamps
02:00 20120204 20120203 23 12 xxxxxxxxxxxx
02:02 20120203 13 xxxxxxxxxxxx
02:04 20120204 20120203 26 12 xxxxxxxxxxxx
02:06 20120204 21 16 xxxxxxxxxxxx
02:08 20120204 20120203 23 15 xxxxxxxxxxxx
02:10 20120204 20120203 33 11 xxxxxxxxxxxx
...



merci d'avance pour votre aide :)