Maison >base de données >tutoriel mysql >Comment remplir les dates manquantes dans les récupérations de données MySQL ?

Comment remplir les dates manquantes dans les récupérations de données MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-12 19:09:11427parcourir

How to Populate Missing Dates in MySQL Data Retrievals?

Récupération de données entre des dates : remplissage d'enregistrements vides

Dans MySQL, la sélection de données dans une plage de dates spécifiée est généralement réalisée à l'aide de l'opérateur BETWEEN. Cependant, cette approche peut entraîner des dates manquantes lorsqu'aucune donnée n'est présente. Pour résoudre ce problème, une technique impliquant des « tableaux de calendrier » est utilisée.

Le concept d'un tableau de calendrier est de créer un tableau qui contient une séquence de dates dans la plage souhaitée. Ceci est réalisé en utilisant le code suivant :

CREATE TABLE ints (i INTEGER);
INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);

Cette table fournit une plage de nombres de 0 à 9. Pour générer la table du calendrier, nous joignons les ints à lui-même plusieurs fois pour créer une liste d'intervalles de dates :

SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY as date
FROM ints a JOIN ints b
ORDER BY a.i * 10 + b.i

Le résultat est un tableau avec une séquence de dates allant du '2009-06-25' au '2009-07-04'. Pour récupérer les données, nous avons laissé joindre la table du calendrier avec la table d'origine :

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
    ORDER BY a.i * 10 + b.i
) cal LEFT JOIN tbl ON cal.date = tbl.date
WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';

Cette requête renvoie les données pour toutes les dates comprises entre le '2009-06-25' et le '2009-07-01', y compris les lignes sans données renseignées avec « 0 ».

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