Un problème récurrent quand on requête une base de données :
Le problème n'est pas seulement d'obtenir la date en question, mais l'ensemble des données relatives à la ligne la plus récente.Comment obtenir la ligne la plus récente de chaque groupe ?
Pour répondre à ce problème il faut :
1. Identifier la colonne déterminant la notion temporelle
Pour cela on aura généralement affaire à une colonne DATETIME.
Attention, se référer
Une question du forum MySQL, « Comment obtenir le nombre de lignes d'une table le plus rapidement possible ? »
Il est vrai que InnoDB n'est pas performant pour cet exercice, bien moins que MyISAM qui stockait le nombre de lignes en dur.
Entre des tables à balayer ou des choix d'index hasardeux (faîtes un EXPLAIN pour voir ça), sur des tables volumineuses le résultat peut arriver en une fraction de secondes, ou plus d'une minute !
J'ai retenu 3 requêtes
J'intègre et traite de la data toute la journée. Pour cela un script PHP CLI tourne en permanence, et dès que du nouveau arrive, c'est inséré en base de données, transmis par e-mail, déposé sur un WebDAV ou un SFTP, historisé, archivé, etc.
Une belle mécanique, mais soudainement bien fragile dès qu'une maintenance est nécessaire. Que se passe-t-il si le script est interrompu en pleine écriture d'un fichier ? Les fichiers risquent d'être corrompus, des transactions SQL sont à annuler,
mysql_config_editor est un gestionnaire de profils livré avec MySQL et facilitant la connexion aux différents outils de la suite MySQL.
Exemple, pour se connecter au client de manière classique :
Avec l'aide de mysql_config_editor et d'un profil my_profile_name préalablement créé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $ mysql --host=localhost --user=my_username --password=my_password
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $ mysql --login-path=my_profile_name mysql> select all user(); +-----------------------+
Nous sommes souvent amenés à grouper des lignes selon des métriques temporelles quotidiennes, hebdomadaires, mensuelles, etc. Moins souvent à l'heure, au quart d'heure, à la minute. Voici un moyen simple de procéder.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SET @slice = 60 * 60 * 2; -- Groupement sur combien de secondes ? Ici sur 2 heures SELECT ALL DATE(created_at) + INTERVAL TIME_TO_SEC(created_at) DIV @slice * @slice SECOND AS slice, COUNT(*) AS n FROM dataset GROUP BY