SQL:使用其他运行序列字段

时间:2016-09-26 10:39:53

标签: sql vertica

我正在尝试创建一个select语句,将每个唯一行(按位置'字段)复制361次(0到360)。还会创建一个显示序列(0到360)的附加列。这样做的目的是计算每个lat&的坐标。长期使用半径和度数字段将其渲染为Tableau中的圆圈。

这是原始样本表。

enter image description here

这是最终所需的输出。

enter image description here

有人可以帮忙吗?

以逗号分隔的示例数据〜

Location,Radius,Latitude,Longitude
A,500,31.4799,88.38783
B,1000,35.580941,77.01125
C,800,37.492528,88.797115

编辑:原始表格中有50多行。

2 个答案:

答案 0 :(得分:1)

我不认为Vertica具有与Postgres generate_series()相当的效果。如果你有一个至少有361行的表,你可以模拟它:

with n as (
      select row_number() over () - 1 as n
      from (select s.* from sample s limit 361) s
     )
select s.*, n.n as degress
from sample s cross join
     n;

在Vertica中,order by功能可选row_number()

答案 1 :(得分:0)

您也可以滥用Vertica中的time series来生成序列,而不需要任何表格:

with mydegrees as (
    SELECT extract( epoch from slice_time - to_timestamp(0) ) Degree
    from ( select to_timestamp(0) ts 
           union all
           select to_timestamp(0) + interval '360 seconds' ) x   
    TIMESERIES slice_time AS '1 second' OVER (ORDER BY ts)
) 
select t.*, d.Degree
from mytable t cross join 
     mydegrees d;

基本上我们只设置0到360秒的开始/时间戳,然后我们为每个时间片提取“自纪元0开始的秒数”(使用1秒时间片)。