按日期范围对总计进行分组

时间:2010-10-07 11:19:27

标签: sql

我必须使用不同的标准从表格中获取总数,我喜欢这样:

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;

这很好用,我得到了预期的结果。

现在,我必须在过去12个月内每周重复一次,不包括假期。因此,我生成了一组将在查询中使用的日期范围。所以,我为所有日期范围重复上面的sql语句,这是一个漫长的过程。

我必须每周获得总数。例如,2010年9月26日至2010年10月2日,2010年9月19日至2010年9月25日,2010年9月12日至2010年9月18日等。我应该如何将这些范围放入查询分组和选择列表,因为我没有在表格中。

如何在一次拍摄中完成该操作并获取每个日期范围的所有总计。请帮我用sql。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以创建包含日期范围的表格。你可以加入新桌子;你必须用group by替换distinct。例如:

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