我的表(市场)有三列:销售员、销售员和周。我想能够计算出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

最佳答案

您可以使用窗口函数来执行此操作。在一周内,这应该可以做到:

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

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

10-04 18:26