Maison >base de données >tutoriel mysql >Comment remplir les dates manquantes dans une plage MySQL avec des valeurs nulles ?

Comment remplir les dates manquantes dans une plage MySQL avec des valeurs nulles ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-23 16:47:09555parcourir

How to Fill Missing Dates in a MySQL Range with Zero Values?

La plage de dates MySQL remplit les valeurs manquantes

Supposons que vous ayez un tableau avec deux colonnes (date et score) et que vous souhaitiez remplir les dates manquantes pour obtenir une séquence continue de valeurs. Par exemple, si votre tableau contient actuellement les données suivantes :

<code>日期      分数
-----------------
2010-08-01  19
2010-08-02  21
2010-08-04  14
2010-08-07  10
2010-08-10  14</code>

Vous souhaitez remplir les dates manquantes (03-08-2010, 05-08-2010 et 06-08-2010) avec des 0 pour obtenir le résultat suivant :

<code>日期      分数
-----------------
2010-08-01  19
2010-08-02  21
2010-08-03  0
2010-08-04  14
2010-08-05  0
2010-08-06  0
2010-08-07  10
2010-08-10  14</code>

Pour y parvenir vous pouvez utiliser la requête suivante :

<code class="language-sql">SELECT x.ts AS timestamp,
       COALESCE(y.score, 0) AS cnt
FROM (SELECT DATE_ADD('2010-06-06', INTERVAL n.id - 1 DAY) AS ts
        FROM numbers n
       WHERE DATE_ADD('2010-06-06', INTERVAL n.id -1 DAY) < '2010-08-11') x
LEFT JOIN your_table y ON DATE(x.ts) = DATE(y.date);</code>

Voici une répartition de la requête :

  • Créez un tableau de nombres (nombres) avec des valeurs auto-incrémentées.
  • Utilisez DATE_ADD pour construire une liste de dates à partir d'une date de début spécifiée ('2010-06-06' dans l'exemple) et incrémentez le nombre de jours en fonction de l'identifiant du nombre dans la table des nombres.
  • Utilisez LEFT JOIN pour fusionner la liste des dates avec votre table d'origine en fonction de la partie date.
  • Utilisez COALESCE pour remplacer toutes les valeurs nulles dans y.score par 0.
  • Vous pouvez utiliser DATE_FORMAT pour modifier le format de la date si nécessaire.

Veuillez remplacer your_table par le nom réel de votre table. Assurez-vous d'avoir une table nommée numbers qui contient une colonne à incrémentation automatique nommée id qui contient des entiers consécutifs commençant à 1. Sinon, vous devez d'abord en créer un. Par exemple : CREATE TABLE numbers (id INT AUTO_INCREMENT PRIMARY KEY); Insérez ensuite un nombre suffisant d'enregistrements pour couvrir votre plage de dates.

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