使用 SQL 的滞后计算
Lag Calculations using SQL
我正在尝试使用 sql(大查询)执行一些计算。
我附上了我的 table 输出的参考。
我想要执行的是一个额外的列,将按如下方式计算:
- 新列的第一行:“conteggio”列的第二行/“conteggio”列的第一行
- 新列的第二行:“conteggio”列的第三行/“conteggio”列的第一行
- 新栏的第三行:“conteggio”栏的第四行/“conteggio”栏的第一行
等等...
我想的是使用 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
如果应用于您问题中的示例数据 - 输出为
我正在尝试使用 sql(大查询)执行一些计算。 我附上了我的 table 输出的参考。 我想要执行的是一个额外的列,将按如下方式计算:
- 新列的第一行:“conteggio”列的第二行/“conteggio”列的第一行
- 新列的第二行:“conteggio”列的第三行/“conteggio”列的第一行
- 新栏的第三行:“conteggio”栏的第四行/“conteggio”栏的第一行
等等...
我想的是使用 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
如果应用于您问题中的示例数据 - 输出为