Maison  >  Article  >  base de données  >  Comment implémenter la complétion automatique de la date dans SQL

Comment implémenter la complétion automatique de la date dans SQL

(*-*)浩
(*-*)浩original
2019-05-11 12:01:289855parcourir

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.

Comment implémenter la complétion automatique de la date dans SQL

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 :

Comment implémenter la complétion automatique de la date dans SQL

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn