Nous utilisons un système de Business Intelligence et devons charger une liste de dates afin que nous puissions les marquer comme "la semaine dernière" ou "12 derniers mois" ou une valeur dynamique.
Je me demande quel est le moyen le plus simple de générer virtuellement un tableau qui répertorie simplement les dates dans une colonne, littéralement chaque date du '01/01/2014' à la date actuelle (les autres colonnes, je peux utiliser une formule à partir de là). En fait, même l'ajout de dates futures sur un an serait probablement utile également.
Maintenant, oui, je peux récupérer des dates distinctes dans une autre table de faits aléatoires contenant des milliers d'entrées, mais cela semble bâclé et crée une dépendance là où il ne devrait vraiment pas y en avoir.
En utilisant T-SQL pur, vous pouvez effectuer les opérations suivantes:
;WITH cte AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) - 1 AS [Incrementor]
FROM [master].[sys].[columns] sc1
CROSS JOIN [master].[sys].[columns] sc2
)
SELECT DATEADD(DAY, cte.[Incrementor], '2014-01-01')
FROM cte
WHERE DATEADD(DAY, cte.[Incrementor], '2014-01-01') < GETDATE();
Ou, j'ai également écrit une fonction SQLCLR pour rendre cela un peu plus facile, qui est disponible dans la version gratuite de la bibliothèque SQL # :
SELECT [DatetimeVal]
FROM [SQL#].[Util_GenerateDateTimeRange]('2014-01-01', GETDATE(), 1, N'day');
Si vous souhaitez que la date de fin soit ultérieure, remplacez simplement la GETDATE()
dans l'une ou l'autre requête.
Essaye ça.
Vous n'avez pas besoin d'une table différente, mais si vous en avez une, cela pourrait vous aider.