Maison >base de données >tutoriel mysql >Comment remplir les dates manquantes avec des valeurs nulles dans les requêtes SQL ?
Récupérer les dates manquantes avec des valeurs nulles entre les plages de dates
La requête d'origine a récupéré les données entre deux dates, mais elle a exclu les dates manquantes. Pour inclure les dates manquantes et attribuer une valeur zéro aux données manquantes, nous pouvons utiliser une technique appelée « marquage de date ».
Marquage des dates manquantes
Un tableau commun récursif L'expression (CTE) peut être utilisée pour générer une série de dates dans la plage spécifiée. Le CTE, nommé d, commence par la première date de la plage et ajoute récursivement un jour jusqu'à ce qu'il atteigne la date de fin.
;with d(date) as ( select cast('10/01/2012' as datetime) union all select date+1 from d where date < '10/15/2012' )
Joindre avec des données existantes
Ensuite, nous effectuons une jointure externe gauche entre le CTE d et la table de données d'origine temp (t) pour récupérer les données existantes pour chaque date. Si une date existe en temp, la valeur est utilisée ; sinon, nous substituons zéro.
select t.ID, d.date CDate, isnull(t.val, 0) val from d left join temp t on t.CDate = d.date order by d.date OPTION (MAXRECURSION 0) -- use this if your dates are >99 days apart
Remarque sur MAXRECURSION
La clause OPTION (MAXRECURSION 0) empêche l'échec de la requête en raison d'une récursion excessive si la plage de dates est trop grand. Vous pouvez ajuster la valeur en fonction de votre plage de données spécifique.
En utilisant cette technique, nous pouvons récupérer toutes les dates entre deux dates, y compris les dates manquantes, tout en garantissant que les valeurs manquantes sont représentées par zéro.
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!