Remplir les dates manquantes dans les résultats SQL
Lors de l'interrogation d'une base de données pour une plage de dates, il est courant de rencontrer des lacunes dans les données. Pour résoudre ce problème, il existe plusieurs approches simples pour compléter les résultats avec des dates vides et les nombres correspondants.
Du côté de MySQL
Une option consiste à créer une procédure stockée qui génère une table temporaire avec toutes les dates possibles dans la plage spécifiée. Cette table peut ensuite être jointe aux résultats de la requête pour renseigner les dates manquantes.
CREATE PROCEDURE sp1(d1 DATE, d2 DATE) DECLARE d DATETIME; CREATE TEMPORARY TABLE foo (d DATE NOT NULL); SET d = d1 WHILE d <= d2 DO INSERT INTO foo (d) VALUES (d) SET d = DATE_ADD(d, INTERVAL 1 DAY) END WHILE SELECT foo.d, COUNT(date) FROM foo LEFT JOIN table ON foo.d = table.date GROUP BY foo.d ORDER BY foo.d ASC; DROP TEMPORARY TABLE foo;
Du côté Perl
Si les modules Perl aiment Date : Si vous êtes disponibles, vous pouvez parcourir une plage de dates et vérifier les dates vides dans les résultats de la requête. Si trouvé, ajoutez une entrée à zéro pour cette date.
use Date::y; # Get the date range my $d1 = '2008-08-05'; my $d2 = '2008-08-07'; # Iterate over the date range my $date = Date::y->date($d1); while ($date <= Date::y->date($d2)) { # Check if the date exists in the query results if (! exists $results{$date}) { # Add the date with a zero count $results{$date} = 0; } $date = $date->next; }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!