【问题标题】:Show Totals for MTD显示 MTD 的总计
【发布时间】:2016-12-20 20:58:26
【问题描述】:

我的表(市场)中有三列:Salesman、Sales 和 Week。我希望能够计算 MTD(本月至今)的总数。就我而言,我希望能够提供从 2016 年 11 月 18 日到 2016 年 12 月 18 日的表格中的数据。我不知道如何在我的表中制定 MTD 列。任何帮助将不胜感激。

select * from Market:

Salesman             Sales                    Week
Joe                   40                     12-18-2016
Mike                  27                     12-11-2016 
Todd                  29                     12-04-2016
Robert                44                     11-27-2016
Tony                  15                     11-20-2016
Morgan                60                     11-13-2016
Edwin                 25                     11-06-2016 
Josh                  19                     10-30-2016
Travis                24                     10-23-2016
Wade                  35                     10-16-2016                    

我需要的结果:

Select Salesman, Sales as 'This Week', (some formula) as 'MTD' from Market
where Week = '12-18-2016'

Salesman             This Week                  MTD
Joe                    40                       40
Mike                    0                       27
Todd                    0                       29
Robert                  0                       44
Tony                    0                       15

【问题讨论】:

  • 有人在这方面有进展吗?

标签: sql postgresql


【解决方案1】:

您可以使用窗口函数来做到这一点。一周内,应该这样做:

select m.*
from (Select Salesman, Sales as "This Week",
             sum(Sales) over (partition by SalesMan, date_trunc('month', week)
                              order by week) as MTD
      from Market m
     ) m
where Week = '2016-12-18';  -- assumes that the date is stored in a native date/time format

over 子句中的 order by 仅用于支持不是最近一周的周。

【讨论】:

  • 虽然不返回错误,但返回的是空字段。
  • @PLearner 。 . .这确实假设 week 是日期/时间列(即不存储为字符串)。
猜你喜欢
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多