简体   繁体   English

在 SUM over PARTITION 之后使用 LAG

[英]Using LAG after a SUM over PARTITION

+---------+----------+---------+------------+-------+---------+---------------+
| Product | Version  | Country |    Week    | sales | returns | Running_sales |
+---------+----------+---------+------------+-------+---------+---------------+
| Pdt1    | pdt1ver1 | Aus     | 2020M01W01 |    10 |       3 |             7 |
| pdt1    | pdt1ver1 | Fra     | 2020M01W01 |     8 |       2 |             6 |
| pdt1    | pdt1ver1 | Fra     | 2020M01W02 |    15 |       5 |            16 |
| pdt1    | pdt1ver2 | UK      | 2020M01W01 |    20 |       5 |            15 |
| pdt1    | pdt1ver2 | UK      | 2020M01W02 |    15 |       1 |            29 |
| pdt1    | pdt1ver2 | UK      | 2020M01w03 |     9 |       0 |            38 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W01 |     5 |       1 |             4 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W02 |     3 |       0 |             7 |
+---------+----------+---------+------------+-------+---------+---------------+

I have a view giving me the data and running total shown before.我有一个视图给我之前显示的数据和运行总数。 It's a simple select, with also this in the select statement (already got help from here for this one):这是一个简单的选择,在选择语句中也有这个(已经从这里得到了这个帮助):

Sum(sales-returns) over(
  partition by Version, Country 
  Order by Week 
  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) Running_sales

I now need to have another column that would give me the returns of the previous week (but staying in the subgroup it should be in, this means I can't have anything in row 1, 2, 4 and 7 because there is no previous row), as such :我现在需要有另一列来给我前一周的回报(但留在它应该在的子组中,这意味着我不能在第 1、2、4 和 7 行有任何东西,因为没有以前的行),因此:

+---------+----------+---------+------------+-------+---------+---------------+------------------+
| Product | Version  | Country |    Week    | sales | returns | Running_sales | previous_returns |
+---------+----------+---------+------------+-------+---------+---------------+------------------+
| Pdt1    | pdt1ver1 | Aus     | 2020M01W01 |    10 |       3 |             7 |                  |
| pdt1    | pdt1ver1 | Fra     | 2020M01W01 |     8 |       2 |             6 |                  |
| pdt1    | pdt1ver1 | Fra     | 2020M01W02 |    15 |       5 |            16 |                2 |
| pdt1    | pdt1ver2 | UK      | 2020M01W01 |    20 |       5 |            15 |                  |
| pdt1    | pdt1ver2 | UK      | 2020M01W02 |    15 |       1 |            29 |                5 |
| pdt1    | pdt1ver2 | UK      | 2020M01w03 |     9 |       0 |            38 |                1 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W01 |     5 |       1 |             4 |                  |
| pdt2    | pdt2ver1 | Fra     | 2020M01W02 |     3 |       0 |             7 |                1 |
+---------+----------+---------+------------+-------+---------+---------------+------------------+

I tried adding this to my select statement :我尝试将其添加到我的选择语句中:

LAG(returns,1,0)
    OVER(partition by Version, Country 
      Order by Week 
      ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) previous_returns

But it's obviously not that easy.但这显然没那么容易。 Maybe the window ?也许是窗户? Do I need to use partition again ?我需要再次使用分区吗? Any tips would be appreciated on this issue.关于这个问题的任何提示将不胜感激。 I'm using Teradata.我正在使用 Teradata。

这应该很简单:

lag(returns) over(partition by version, country order by week) previous_returns

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM