Maison > base de données > tutoriel mysql > Comment remplir les dates manquantes dans les requêtes MySQL entre deux dates ?

Comment remplir les dates manquantes dans les requêtes MySQL entre deux dates ?

Barbara Streisand
Libérer: 2024-12-16 22:14:13
original
539 Les gens l'ont consulté

How to Populate Missing Dates in MySQL Queries Between Two Dates?

Remplir les dates manquantes lors de la récupération de données entre deux dates dans MySQL

Dans MySQL, lors de la sélection de données entre deux dates à l'aide de l'opérateur BETWEEN, c'est Il est possible que certaines dates comprises dans la plage spécifiée n'aient aucune donnée correspondante. Cela peut entraîner des lignes vides ou manquantes dans les résultats de la requête.

Énoncé du problème :

Considérez une table nommée « tbl » avec des données associées à des dates, comme indiqué ci-dessous. :

Date Data
2009-06-25 75
2009-07-01 100
2009-07-02 120

Si nous voulons récupérer toutes les données entre le '2009-06-25' et '2009-07-01' à l'aide de la requête suivante :

SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
Copier après la connexion

La requête ne renverrait que les lignes contenant des données existantes dans la plage spécifiée. Cela signifie que les dates sans aucune donnée, telles que « 2009-06-26 », « 2009-06-27 » et « 2009-06-28 », seraient omises des résultats.

Solution : Tableaux de calendrier pour renseigner les dates manquantes

Pour résoudre ce problème et inclure toutes les dates dans les délais spécifiés plage, qu'il existe ou non des données les concernant, nous pouvons utiliser un concept connu sous le nom de « tableaux de calendrier ». Ces tables permettent de générer une séquence de dates dans un intervalle donné, servant essentiellement de « pseudo » table de toutes les dates possibles.

Voici un exemple de création d'une table de calendrier dans MySQL :

-- Create a table with integers from 0 to 9
CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

-- Generate a sequence of dates from '2009-06-25' to '2009-07-01'
SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date
FROM ints a JOIN ints b
WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
Copier après la connexion

Une fois que vous avez créé la table du calendrier, vous pouvez effectuer une jointure gauche avec votre table de données pour renseigner les dates manquantes. Voici la requête mise à jour :

SELECT cal.date, tbl.data
FROM (
SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date
FROM ints a JOIN ints b
WHERE date BETWEEN '2009-06-25' AND '2009-07-01'
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
Copier après la connexion

Cette requête récupère toutes les dates comprises dans la plage spécifiée, y compris celles sans aucune donnée dans la table "tbl". Les dates avec des données manquantes auront une valeur NULL dans la colonne "données".

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal