【问题标题】:SQL query with week days带有工作日的 SQL 查询
【发布时间】:2011-03-28 05:12:51
【问题描述】:

我想知道创建将按过去 7 天分组的报告的最佳方法是什么 - 但不是我每天都有数据。例如:

08/01/10 | 0 2010 年 8 月 2 日 | 5 2010 年 8 月 3 日 | 6 2010 年 8 月 4 日 | 10 2010 年 8 月 5 日 | 0 2010 年 8 月 6 日 | 11 2010 年 8 月 7 日 | 1

唯一的选择是用那些日子创建一个虚拟表并将它们完全加入吗?

谢谢

【问题讨论】:

  • 这个例子被误解了,所以我的意思是 DATE |计数(数据)
  • 这个问题之前以各种形式被问过很多次。答案通常是维护一个日历表。 stackoverflow.com/questions/40456/…

标签: sql reporting


【解决方案1】:

试试这样的

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);

【讨论】:

    【解决方案2】:

    许多人会建议动态创建日期范围的方法,然后您可以加入这些日期范围。这肯定会奏效,但根据我的经验,日历表是要走的路。这将以维护日历表为代价使 SQL 变得微不足道和通用。

    在未来的某个时候,有人会过来要求提供另一份不包括周末的报告。然后,您必须为周末创建动态日生成帐户。然后有人会要求不包括公共假期的工作日,此时您别无选择,只能创建日历表。

    我建议你硬着头皮创建一个日历表来加入。使用每个日期预先填充它,如果您想提前考虑,然后添加“工作日”列,如果您的公司使用非标准周数进行报告,甚至可能添加周数

    【讨论】:

      【解决方案3】:

      您没有提到具体的语言(请提供更详细的答案),但大多数版本的 sql 都有一个用于当前日期的函数(例如 GetDate())。你可以取那个日期,减去 x (7) 天,然后像这样构建你的 WHERE 语句。

      然后您可以按该日期的日期分组。

      【讨论】:

      • 但如果不是所有日子都有数据,我无法分组。它们不会显示
      • 然后使用类似 Michael 的示例(现在我们也知道 DB 类型),但不要忘记您自己的分组例程和日期/日期部分。
      【解决方案4】:

      选择最后 7 笔交易并将其与您的查询连接,然后按日期列分组。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多