Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2654 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL 5.0] datetime arrondi

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MYSQL 5.0] datetime arrondi

n°1675586
stb
Posté le 23-01-2008 à 12:48:51  profilanswer
 

Bonjour,
 
je cherche à arrondir la valeur d'un date time :
* au quart d'heure
* à l'heure
* au mois
pour faire de l'aggrégation sur mes valeurs.
 
J'avais jusqu'ici une méthode assez simple pour les deux premiers cas.
 
ex pour l'arrondi au quart d'heure :

Code :
  1. SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(ihm_valve_date) div 900* 900) as date,source,min(time),max(time),avg(time)
  2. from stats
  3. group date, source


 
mais malheureusement les mois ne comportent pas tous 31 jours...

mood
Publicité
Posté le 23-01-2008 à 12:48:51  profilanswer
 

n°1675587
skeye
Posté le 23-01-2008 à 12:50:34  profilanswer
 

Bah tu récupères le mois et l'année, et tu recréées un champ date correspondant au 1er de ce mois et cette année...je connais pas assez mysql pour te dire quelles sont les fonctions à utiliser, mais le principe est simple...ou alors ce n'est pas vraiment ce que tu veux?


Message édité par skeye le 23-01-2008 à 12:51:22

---------------
Can't buy what I want because it's free -
n°1675607
omega2
Posté le 23-01-2008 à 13:20:34  profilanswer
 

RTFM : http://dev.mysql.com/doc/refman/5. [...] tions.html
DATE_FORMAT
EXTRACT
MONTH
YEAR
 
DATE_FORMAT te permet d'arrondir comme t'as envie (sauf arrondis au quart d'heure) mais transforme en chaine de caractère (comparaisons plus lentes)
EXTRACT te permet d'obtenir la même chose mais ne permet pas de récupérer en même temps le "mois+année", et le "jour+heure". (donc utile uniquement pour le regroupement par mois)
MONTH et YEAR (et autres équivalent, voir doc) te permettent de travailler sur des nombres mais demandent deux comparaisons (un sur le mois, un sur l'année)
 
A noter que dans tous les cas ces fonctions empêche l'utilisation d'un index pour le regroupement (donc la requête peut être très longue sur les très grosses tables)

n°1675627
stb
Posté le 23-01-2008 à 13:50:56  profilanswer
 

omega > oui, j'ai peur pour les perfs

n°1675652
omega2
Posté le 23-01-2008 à 14:35:28  profilanswer
 

Côté performance, il n'y a pas 36 solutions de toute manière :
1) limiter le nombre de données à traiter : en séparant les données récentes des données anciennes (utilisation de deux tables de même structure) ou en stockant les résultats déjà calculé (ce qui fait qu'on a besoin que les données postérieure à une date/heure donnée ce qui permet d'utiliser les index pour savoir ce qu'on doit traiter)
2) stocker les dates/heures arrondis (ce qui permet de mettre des index et d'éviter le temps de calcul au moment du traitement)
3) utiliser une table temporaire à laquelle on rajoute des index sur les colonnes correspondant aux dates/heures arrondis


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL 5.0] datetime arrondi

 

Sujets relatifs
[Pb] site sans php/mysql, remplacement par javascript ?[ MySQL ] - Problème avec GROUP BY - Help !
PHP/MYSQL : Connexion chez l'hebergeur STRATOProbléme d'image dans un tableau PHP/MYSQL
[MySQL(i)] :mysql ne veut pas se connecter a autre chose que localhostLost connection to MySQL server during query
impossible de me connecter à une base MySQLphpmyadmin -> Ne peut charger Mysql
Erreur Mysql sur </html>[RESOLU] [MySQL] Gérer une exception dans le tri d'une requête
Plus de sujets relatifs à : [MYSQL 5.0] datetime arrondi


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR