2016-09-26 60 views
0

我正在嘗試創建一個Select語句,以按照361次(0到360)的順序複製每個唯一行(由'位置'字段)。還會創建一個附加列,顯示序列(0到360)。這樣做的目的是使用半徑和度數字段計算long long每個lat的座標,使其在Tableau內呈現爲一個圓。SQL:使用額外的運行順序字段複製行

這是原始樣本表。

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 

EDIT:有在原來的表50個加行。

+0

哪個數據庫? –

+0

它是在vertica – Jake

回答

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()功能。

+0

哦,親愛的,問題是我只有50多行在表中〜任何替代方法在你的意見? – Jake

+1

啊,用第三行代替第三行中的'樣本'表,並且有超過360行的其他表將取消對原始表格行的依賴。將標記你的答案是正確的。謝謝! – Jake

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秒的時間片)。