Maison > base de données > tutoriel mysql > Comment afficher toutes les dates entre deux dates, y compris les valeurs nulles pour les dates manquantes ?

Comment afficher toutes les dates entre deux dates, y compris les valeurs nulles pour les dates manquantes ?

Linda Hamilton
Libérer: 2024-12-23 02:08:10
original
878 Les gens l'ont consulté

How to Show All Dates Between Two Dates, Including Zero Values for Missing Dates?

Affichage de toutes les données de date entre deux dates, y compris les valeurs nulles

Lorsque vous travaillez avec des données de date, il est courant de rencontrer des scénarios dans lesquels toutes les dates ne sont pas sont représentés dans votre ensemble de données. Cela peut entraîner des lacunes dans votre analyse. Pour résoudre ce problème et afficher toutes les dates dans une plage spécifiée, nous pouvons utiliser une combinaison de techniques.

Considérons le problème suivant :

Nous avons une table nommée @temp avec la structure suivante :

DECLARE @temp TABLE (
    ID INT IDENTITY(1,1) NOT NULL,
    CDate SMALLDATETIME,
    Val INT
)
Copier après la connexion

Le tableau содержит les données du 2 octobre 2012 au 15 octobre 2012. Cependant, nous souhaitez récupérer toutes les dates entre le 1er octobre 2012 et le 15 octobre 2012 et afficher des valeurs nulles pour toutes les dates manquantes.

Une approche pour gérer cela consiste à utiliser une expression de table commune récursive (CTE) avec une table de calendrier pour générer toutes les dates dans la plage spécifiée. Le CTE est défini comme suit :

;WITH d(date) AS (
    SELECT CAST('10/01/2012' AS DATETIME),
    UNION ALL
    SELECT date + 1
    FROM d
    WHERE date < '10/15/2012'
)
Copier après la connexion

Ce CTE génère toutes les dates du 1er octobre 2012 au 15 octobre 2012.

Ensuite, on rejoint le CTE avec la table @temp pour récupérer les valeurs correspondantes pour chaque date, en gérant les dates manquantes à l'aide de la fonction de gestion ISNULL NULL, comme indiqué dans ce qui suit requête :

SELECT t.ID, d.date AS CDate, ISNULL(t.val, 0) AS val
FROM d
LEFT JOIN temp t ON t.CDate = d.date
ORDER BY d.date
OPTION (MAXRECURSION 0)
Copier après la connexion

L'OPTION (MAXRECURSION 0) est utilisée pour limiter le nombre de récursions dans le CTE, garantissant que la requête ne s'exécute pas indéfiniment. En définissant ceci sur 0, cela permet une récursivité illimitée.

Cette requête produira le résultat souhaité, affichant toutes les dates entre le 1er octobre 2012 et le 15 octobre 2012, avec des valeurs nulles pour les dates manquantes.

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