我有一个数据集,如下所示:
链接号 | 胡班德 | 时间 | 平均速度 | 样品_编号 |
---|---|---|---|---|
链接1 | 8 | 8:00 | 52 | 2 |
链接1 | 8 | 8:30 | 55 | 5 |
链接2 | 9 | 9:00 | 20 | 3 |
链接2 | 9 | 9:30 | 40 | 4 |
我需要将每一行复制 X 次,X = Sample_Number。所以我的结果将如下所示:
链接号 | 胡班德 | 时间 | 平均速度 | 样品_编号 |
---|---|---|---|---|
链接1 | 8 | 8:00 | 52 | 2 |
链接1 | 8 | 8:00 | 52 | 2 |
链接1 | 8 | 8:30 | 55 | 5 |
链接1 | 8 | 8:30 | 55 | 5 |
链接1 | 8 | 8:30 | 55 | 5 |
链接1 | 8 | 8:30 | 55 | 5 |
链接1 | 8 | 8:30 | 55 | 5 |
链接2 | 9 | 9:00 | 20 | 3 |
链接2 | 9 | 9:00 | 20 | 3 |
链接2 | 9 | 9:00 | 20 | 3 |
链接2 | 9 | 9:30 | 40 | 4 |
链接2 | 9 | 9:30 | 40 | 4 |
链接2 | 9 | 9:30 | 40 | 4 |
链接2 | 9 | 9:30 | 40 | 4 |
这样我就可以计算每个链路在每个小时带内的速度百分位。
我已经能够使用generate_series在Postgresql中做到这一点:
select Link_number, Hourband, percentile_cont(0.85) within group (order by Mean_Speed) as Speed_85th
from table, generate_series(1,Sample_Number)
我如何在 Amazon Athena 中执行同样的操作?
正如@Serg建议的那样,您可以使用统计表生成数字序列,然后使用交叉联接根据这些值复制行。
WITH numbers AS (
SELECT n
FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)) AS t(n)
)
SELECT
Link_number,
Houband,
Time,
Mean_speed,
Sample_Number
FROM
your_table AS t
JOIN
numbers AS n
ON
n.n <= t.Sample_Number