2010-08-11 6 views
2

Je voudrais savoir quelle est la meilleure façon de créer un rapport qui sera regroupé par les 7 derniers jours - mais pas tous les jours j'ai des données. par exemple:Requête SQL avec jours de la semaine

08/01/10 | 0 08/02/10 | 5 08/03/10 | 6 08/04/10 | 10 08/05/10 | 0 08/06/10 | 11 08/07/10 | 1

est la seule option est de créer une table fictive avec ces jours et de les rejoindre tout à fait?

vous remercie

+0

Qu'est-ce que votre SGBDR? –

+0

l'exemple est sorti malentendu, donc ce que je voulais dire est DATE | COUNT (DATA) – Himberjack

+0

c'est MSSQL 2008 – Himberjack

Répondre

3

Essayez quelque chose comme ça

WITH LastDays (calc_date) 
AS 
(SELECT DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP) - 6, 0) 
UNION ALL 
SELECT DATEADD(DAY, 1, calc_date) 
FROM LastDays 
WHERE DATEADD(DAY, 1, calc_date) < CURRENT_TIMESTAMP) 
SELECT ... 
FROM LastDays l LEFT JOIN (YourQuery) t ON (l.cal_date = t.YourDateColumn); 
0

Vous ne mentionnez pas la langue spécifique (s'il vous plaît faire pour une réponse plus détaillée), mais la plupart des versions de SQL ont une fonction pour la date actuelle (GetDate(), par exemple). Vous pouvez prendre cette date, soustraire x (7) jours et construire votre instruction WHERE comme ça.

Ensuite, vous pouvez GROUPER PAR le jour-partie de cette date.

+0

mais je ne peux pas grouper si tous les jours ont des données. ils ne seront pas affichés – Himberjack

+0

Ensuite, utilisez quelque chose comme l'exemple de Michael (maintenant que nous connaissons aussi le type DB), mais n'oubliez pas votre propre routine de regroupement et date/dayparts. – Tobiasopdenbrouw

0

sélectionnez les 7 dernières transactions et rejoignez-le avec votre requête, puis groupez-le par colonne de date. J'espère que cela t'aides.

+0

?? mais mes 7 dernières transactions ne sont pas dans tous les jours dans ces 7 jours à coup sûr ... – Himberjack

3

Beaucoup de gens vont proposer des méthodes permettant de créer dynamiquement une plage de dates que vous pouvez joindre contre. Cela fonctionnera certainement mais selon mon expérience une table de calendrier est la voie à suivre. Cela rendra le SQL trivial et générique au prix de la maintenance de la table du calendrier.

À un moment donné, quelqu'un viendra demander un autre rapport excluant les fins de semaine. Vous devez ensuite créer votre compte de génération de jours dynamiques pour les week-ends. Ensuite, quelqu'un vous demandera des jours ouvrables, à l'exception des jours fériés, auquel cas vous n'avez pas d'autre choix que de créer une table de calendrier.

Je vous suggère de mordre la balle et de créer une table de calendrier à joindre. Pré-remplir avec chaque date et si vous voulez anticiper puis ajouter des colonnes pour "Jour ouvrable" et peut-être même le numéro de la semaine si votre entreprise utilise un numéro de semaine non standard pour les rapports

Questions connexes