La méthode pour implémenter la complétion automatique des dates dans SQL : générer d'abord une certaine plage de données de table de calendrier ; puis interroger les données qui nécessitent des tables de données statistiques via cette connexion de table de calendrier et enfin obtenir les données complètes dans cette plage ; , c'est Can.
Récemment, lors du développement de la fonction d'accès statistique, si les données d'un certain jour sont manquantes dans le tableau de données, l'enregistrement de ce jour sera perdu, mais il faut quand même l'afficher. S'il n'y a pas de données pour ce jour, il peut être par défaut à 0. Je pense à deux solutions :
1 Après avoir lu les données, ajouter les données manquantes dans la boucle du programme. , mais il s'agit d'une plage variable pour les données statistiques. Selon la demande, cela peut être compté sur 7 jours, 30 jours ou 60 jours, il est un peu difficile de compléter les données via le programme.
2. Générez d'abord une certaine plage de données de table de calendrier, puis utilisez cette connexion de table de calendrier pour interroger les données dans la table de données statistiques. Sinon, la valeur par défaut est 0 de cette manière. les données complètes dans cette plage, cette solution est donc plus adaptée à ce changement de demande.
Générez maintenant la table du calendrier via l'instruction SQL suivante :
CREATE TABLE num (i INT);-- 创建一个表用来储存0-9的数字 INSERT INTO num (i) VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);-- 生成0-9的数字,方便以后计算时间 CREATE TABLE IF NOT EXISTS calendar(DATE DATE); -- 生成一个存储日期的表,date是字段名 -- 这里是生成并插入日期数据 INSERT INTO calendar(DATE) SELECT ADDDATE( ( -- 起始日期,从2017-1-1开始 DATE_FORMAT("2017-1-1", '%Y-%m-%d') ), numlist.id ) AS `date` FROM ( SELECT n1.i + n10.i * 10 + n100.i * 100 + n1000.i * 1000 AS id FROM num n1 CROSS JOIN num AS n10 CROSS JOIN num AS n100 CROSS JOIN num AS n1000 ) AS numlist;
Après l'exécution du SQL, les enregistrements 1W sont générés du 01/01/2017 au 18/05/2044, ces données sont. assez longtemps. Vous pouvez également générer plus de données en modifiant les conditions correspondantes. Ceci n'est pas expliqué en détail ici.
Exécutez le test sql suivant :
SELECT COUNT(u.id) AS num, c.date FROM calendar AS c LEFT JOIN users AS u ON c.date = u.`created_at` WHERE c.date BETWEEN '2017-05-01' AND '2017-05-07' GROUP BY c.`date` ORDER BY c.`date`
Les résultats suivants sont obtenus :
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!