使用 SQL 的滞后计算

Lag Calculations using SQL

我正在尝试使用 sql(大查询)执行一些计算。 我附上了我的 table 输出的参考。 我想要执行的是一个额外的列,将按如下方式计算:

等等...

我想的是使用 lag() 函数,但我的目标是有一个偏移指示器会发生变化,并且第一行必须在计算中固定。 您对如何使用 sql 公式或如何以巧妙的方式编写查询以获得此类结果有任何想法吗? 在bigquery中查询是没有必要的,即使在其他语言中,那我会尝试用bigquery工具转换。

非常感谢

+-----+---------+-----------+---------+------------------------+-----------------+
| Row | stageid | conteggio | country |       Deal_Stage       | Conversion_Rate |
+-----+---------+-----------+---------+------------------------+-----------------+
|   1 |       1 |       494 | All     | 1. Prospecting         | null            |
|   2 |       2 |       493 | All     | 2. Meeting Preparation | 0.998           |
|   3 |       3 |       338 | All     | 3. 1st Meeting         | 0.6856          |
|   4 |       4 |       164 | All     | 4. Demo Meeting        | 0.4852          |
|   5 |       5 |        62 | All     | 5. Proposal            | 0.378           |
|   6 |       6 |        62 | All     | 6. Proposal Sent       | 1               |
|   7 |       7 |        37 | All     | 7. Closed Won          | 0.5968          |
|   8 |       1 |       373 | Brazil  | 1. Prospecting         | null            |
|   9 |       2 |       354 | Brazil  | 2. Meeting Preparation | 0.9491          |
|  10 |       3 |       238 | Brazil  | 3. 1st Meeting         | 0.6723          |
|  11 |       4 |       102 | Brazil  | 4. Demo Meeting        | 0.4286          |
|  12 |       5 |        27 | Brazil  | 5. Proposal            | 0.2647          |
|  13 |       6 |        27 | Brazil  | 6. Proposal Sent       | 1               |
|  14 |       7 |        17 | Brazil  | 7. Closed Won          | 0.6296          |
|  15 |       1 |         5 | Chile   | 1. Prospecting         | 0.2941          |
|  16 |       2 |         1 | Chile   | 2. Meeting Preparation | 0.2             |
|  17 |       3 |         1 | Chile   | 3. 1st Meeting         | 1               |
|  18 |       4 |         1 | Chile   | 4. Demo Meeting        | 1               |
|  19 |       5 |         1 | Chile   | 5. Proposal            | 1               |
|  20 |       6 |         1 | Chile   | 6. Proposal Sent       | 1               |
|  21 |       7 |         1 | Chile   | 7. Closed Won          | 1               |
|  22 |       1 |        37 | Italy   | 1. Prospecting         | 37              |
|  23 |       2 |        33 | Italy   | 2. Meeting Preparation | 0.8919          |
|  24 |       3 |        32 | Italy   | 3. 1st Meeting         | 0.9697          |
|  25 |       4 |        28 | Italy   | 4. Demo Meeting        | 0.875           |
|  26 |       5 |        19 | Italy   | 5. Proposal            | 0.6786          |
|  27 |       6 |        19 | Italy   | 6. Proposal Sent       | 1               |
|  28 |       7 |        10 | Italy   | 7. Closed Won          | 0.5263          |
|  29 |       1 |        51 | Mexico  | 1. Prospecting         | 5.1             |
|  30 |       2 |        42 | Mexico  | 2. Meeting Preparation | 0.8235          |
|  31 |       3 |        23 | Mexico  | 3. 1st Meeting         | 0.5476          |
|  32 |       4 |         9 | Mexico  | 4. Demo Meeting        | 0.3913          |
|  33 |       5 |         3 | Mexico  | 5. Proposal            | 0.3333          |
|  34 |       6 |         3 | Mexico  | 6. Proposal Sent       | 1               |
|  35 |       7 |         1 | Mexico  | 7. Closed Won          | 0.3333          |
|  36 |       1 |        28 | Spain   | 1. Prospecting         | 28              |
|  37 |       2 |        63 | Spain   | 2. Meeting Preparation | 2.25            |
|  38 |       3 |        44 | Spain   | 3. 1st Meeting         | 0.6984          |
|  39 |       4 |        24 | Spain   | 4. Demo Meeting        | 0.5455          |
|  40 |       5 |        12 | Spain   | 5. Proposal            | 0.5             |
|  41 |       6 |        12 | Spain   | 6. Proposal Sent       | 1               |
|  42 |       7 |         8 | Spain   | 7. Closed Won          | 0.6667          |
+-----+---------+-----------+---------+------------------------+-----------------+

考虑以下方法

select *, 
  round(lead(conteggio) over win / first_value(conteggio) over win, 4) as new_col
from your_table 
window win as (partition by country order by stageid)
-- order by country, stageid    

如果应用于您问题中的示例数据 - 输出为