【问题标题】:SQL Sum by week from daily tableSQL Sum by week from daily table
【发布时间】:2013-12-13 20:15:29
【问题描述】:

我有一张产品销售表。 销售额按天计算。喜欢

product    date         sales
1          '2013-11-01' 100
1          '2013-11-02' 423
1          '2013-11-03' 700
1          '2013-11-04' 233
2          '2013-11-01' 623
2          '2013-11-02' 451
2          '2013-11-03' 9000

我想获得一个查询,它将显示每周的销售额总和 所以像:

product     week ending     sales
1           '2013-11-01'    10000 
1           '2013-11-08'    15000
2           '2013-11-01'    4900
2           '2013-11-08'    30000

总结时我不确定我是如何得到这个每周组的。

我正在使用 teradata

【问题讨论】:

    标签: sql sum teradata


    【解决方案1】:

    如果您使用的是 Teradata 14,则可以利用数据库 TD_SYSFNLIB 中的 DayNumber_Of_Week() 函数:

    SELECT s.Product
         , s.Date + (7-DayNumber_Of_Week(s.date)) AS WeekEndingDate /* Saturday */
         , SUM(s.Sales) AS Sales
      FROM sales AS S
    GROUP BY 1,2;
    

    这应该也适用于 Teradata 13.10。

    使用 Sys_Calendar:

    SELECT s.Product
         , s.DATE + (7-c.Day_Of_Week) AS WeekEndingDate /* Saturday */
         , SUM(s.Sales) AS Sales
      FROM sales AS S
     INNER JOIN
           Sys_Calendar.Calendar c
        ON S.date = c.calendar_date
    GROUP BY 1,2;
    

    【讨论】:

      【解决方案2】:

      我对 TERADATA 知之甚少,但我相信您可以利用 sys_calendar.calendar 表,例如:

      SELECT s.Product, c.week_of_year, SUM(s.sales) AS Sales
      FROM sales AS s
      JOIN sys_calendar.calendar as C
        ON s.date = c.date
      

      您还需要在其中添加年份,以免将 2013 年的第 1 周与 2012 年的第 1 周归为一组。

      【讨论】:

        猜你喜欢
        • 2022-01-05
        • 1970-01-01
        • 2011-04-06
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多