Maison >base de données >tutoriel mysql >Comment sélectionner des données entre les dates, y compris les lignes vides dans MySQL ?

Comment sélectionner des données entre les dates, y compris les lignes vides dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-18 10:48:13342parcourir

How to Select Data Between Dates Including Empty Rows in MySQL?

Sélection de données entre des dates avec des lignes vides dans MySQL

Récupérer des données entre des dates spécifiées à partir d'une base de données est une tâche courante. Cependant, cela peut devenir difficile lorsque vous devez également inclure des lignes vides dans la plage de dates. Dans cet article, nous explorerons une technique pour résoudre ce problème dans MySQL.

Considérons une table nommée "tbl" avec des lignes contenant des données et des dates :

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

Une requête typique pour sélectionner les données entre deux dates, disons « 2009-06-25 » et « 2009-07-01 », seraient be :

SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01'

Cependant, cette requête manquera toutes les dates vides dans cette plage. Pour les inclure, MySQL propose un concept puissant appelé « tables de calendrier ».

Une table de calendrier est une table d'assistance qui contient une série de dates. Vous pouvez facilement en créer un à l'aide d'une technique illustrée par ce guide :

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

-- only works for 100 days, add more ints joins for more
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 renverra toutes les lignes du « 2009-06-25 » au « 2009-07-01 », y compris les lignes vides avec un valeur zéro pour « données ». Notez que vous pouvez optimiser cette technique en remplaçant la sous-requête par un tableau de calendrier régulièrement mis à jour.

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