2010-10-07 6 views
0

Je dois obtenir les totaux d'une table en utilisant différents critères que je fais comme ceci:totaux Regroupement par plages de dates

SELECT DISTINCT 
    SUM(CASE WHEN MYCONDITION1 THEN 1 ELSE 0 END) AS TOTAL1, 
    SUM(CASE WHEN MYCONDITION2 THEN 1 ELSE 0 END) AS TOTAL2 
FROM TABLE1, TABLE2 
WHERE COMMON_CONDITION1 AND COMMON_CONDITION2 
AND BETWEEN DATE1 AND DATE2; 

Cela fonctionne bien et j'obtenir le résultat escompté.

Maintenant, je dois répéter ceci pour chaque semaine pour les 12 derniers mois, à l'exception des vacances. Donc, je génère un ensemble de plages de dates qui seront utilisées dans les requêtes. Donc, je répète l'instruction sql ci-dessus pour toutes les plages de dates, ce qui est un processus long.

Je dois obtenir les totaux pour chaque semaine. Par exemple du 26-Sep-2010 au 02-Oct-2010, du 19-Sep-2010 au 25-Sep-2010, du 12-Sep-2010 au 18-Sep-2010, etc. Comment dois-je mettre ces plages dans le requête pour le regroupement et dans la liste de sélection, car je ne les ai pas dans une table.

Comment puis-je faire cela en une seule fois et obtenir tous les totaux pour chaque plage de dates. S'il vous plaît aidez-moi avec sql.

Merci.

+1

Ne pouvez-vous pas utiliser une table temporaire contenant les plages et joindre à cette table? –

+1

Quel serveur de base de données utilisez-vous? Essayez-vous de le faire en langage SQL? Je doute qu'il existe un moyen direct d'obtenir en SQL non seulement le premier jour de la semaine (le dernier est facile si vous avez d'abord), mais aussi excluant les jours fériés. Cela ressemble à vous avez besoin d'une procédure stockée pour le faire. –

Répondre

1

Vous pouvez créer une table contenant les plages de dates. Vous pouvez rejoindre sur la nouvelle table; vous devrez remplacer distinct par groupe. Par exemple:

SELECT TABLE3.DATE1 
,  TABLE3.DATE2 
,  SUM(CASE WHEN MYCONDITION1 THEN 1 ELSE 0 END) AS TOTAL1 
,  SUM(CASE WHEN MYCONDITION2 THEN 1 ELSE 0 END) AS TOTAL2 
FROM TABLE1, TABLE2, TABLE3 
WHERE COMMON_CONDITION1 
     AND COMMON_CONDITION2 
     AND DATE_COLUMN BETWEEN TABLE3.DATE1 AND TABLE3.DATE2 
GROUP BY 
     TABLE3.DATE1 
,  TABLE3.DATE2 
Questions connexes