Un problème récurrent quand on requête une base de données : Comment obtenir la ligne la plus récente de chaque groupe ? 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. 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 ...
Mis à jour 15/03/2024 à 10h08 par Malick (Ajout balises code)
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 ...
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 1234567SET @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 ...
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
Exercice 8, linéarisation, sous-requêtes Des résultats d'agrégats à présenter en colonne plutôt qu'en ligne. Merci au SQL et sa grande perpendicularité. Ma solution : Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part 12345SELECT ALL (SELECT ALL COUNT(*) FROM TBL1) AS TBL1, (SELECT ALL COUNT(*) FROM TBL2) AS TBL2, (SELECT ALL COUNT(*) FROM TBL3) AS TBL3 ;
SELECT ALL (SELECT ALL COUNT(*) FROM TBL1) AS TBL1, (SELECT ALL COUNT(*) FROM TBL2) AS TBL2, (SELECT ALL COUNT(*) FROM TBL3) AS TBL3 ;
L'exercice No 7 intitulé "le comptage", consiste à numéroter les lignes d'un résultat. Rien de difficile, les fonctions d'analyse fenêtrées réalisent cela en 1 tour de main. Ma solution : Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part 123SELECT ALL PSP_NOM, ROW_NUMBER() OVER (ORDER BY PSP_NOM ASC) AS N FROM T_PROSPECT_PSP ORDER BY 2 ASC; Avec MySQL le ORDER BY de ROW_NUMBER() trie le résultat final. Je ne sais pas s'il s'agit d'un comportement standard (le savez-vous ...
SELECT ALL PSP_NOM, ROW_NUMBER() OVER (ORDER BY PSP_NOM ASC) AS N FROM T_PROSPECT_PSP ORDER BY 2 ASC;