Maison >base de données >tutoriel mysql >Comment générer une plage de dates complète dans MySQL pour l'analyse de la croissance des utilisateurs, même avec des données manquantes ?

Comment générer une plage de dates complète dans MySQL pour l'analyse de la croissance des utilisateurs, même avec des données manquantes ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-09 07:15:101004parcourir

How to Generate a Complete Date Range in MySQL for User Growth Analysis, Even with Missing Data?

Obtenir toutes les dates d'une plage dans MySQL, même avec des enregistrements manquants

Dans une base de données utilisateur, on peut rencontrer le besoin de créer des graphiques illustrant la croissance de la base d’utilisateurs. Une requête couramment utilisée est :

SELECT DATE(datecreated), count(*) AS number FROM users 
WHERE DATE(datecreated) > '2009-06-21' AND DATE(datecreated) <= DATE(NOW())
GROUP BY DATE(datecreated) ORDER BY datecreated ASC

Bien que cette requête récupère les informations souhaitées, elle omet les dates auxquelles aucun utilisateur n'a été enregistré. Pour résoudre ce problème, une solution utilisant un calendrier dynamique peut être mise en œuvre. Voici comment :

select  * from (
select date_add('2003-01-01 00:00:00.000', INTERVAL n5.num*10000+n4.num*1000+n3.num*100+n2.num*10+n1.num DAY ) as date from
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n1,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n2,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n3,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n4,
(select 0 as num
   union all select 1
   union all select 2
   union all select 3
   union all select 4
   union all select 5
   union all select 6
   union all select 7
   union all select 8
   union all select 9) n5
) a
where date >'2011-01-02 00:00:00.000' and date < NOW()
order by date

Ce calendrier dynamique génère des dates dans une plage spécifiée, permettant aux dates sans base d'utilisateurs d'être incluses dans les résultats. En ajustant les limites de date et en appliquant la formule à votre structure de données spécifique, vous pouvez générer un graphique qui reflète avec précision la croissance de la base d'utilisateurs, même pendant les périodes d'inactivité.

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