2016-12-16 20 views
0

根據我今天對這個主題的第一個問題(link),向我展示了更多。 我有以下SQL結果:年,季度,月份,星期和x值得值。目前,我每月給出1-4個數字。不過,我現在想花費連續52個號碼,一個月只能使用4個號碼。Postgresql:用連續數字將行分成4行

也就是說,從下面的結果:

year | quarter | month | week | value 
2016 | 1  | 1  | 1 | 19738,5 
2016 | 1  | 1  | 2 | 19738,5 
2016 | 1  | 1  | 3 | 19738,5 
2016 | 1  | 1  | 4 | 19738,5 

如果這成爲:

year | quarter | month | week | value 
2016 | 1  | 1  | 1 | 19738,5 
2016 | 1  | 1  | 2 | 19738,5 
2016 | 1  | 1  | 3 | 19738,5 
2016 | 1  | 1  | 4 | 19738,5 
2016 | 1  | 2  | 5 | 19738,5 
2016 | 1  | 2  | 6 | 19738,5 
2016 | 1  | 2  | 7 | 19738,5 
2016 | 1  | 2  | 8 | 19738,5 

祖diesem Zeitpunkt lautet死查詢,以便:

SELECT a.year, a.quarter, a.month, b.week AS week, sum(a.points) AS value 
FROM 
    TABLE AS a, 
    (SELECT UNNEST(ARRAY[1, 2, 3, 4]) as week) AS b 
GROUP BY 
    year, 
    quarter, 
    month, 
    week; 

另外,我很遺憾沒有想法和希望的幫助。

+1

你應該編輯你的問題,並在你的問題中包括查詢。 –

+1

大多數月份有30或31天(<> 4周)。 – jarlh

+0

@GordonLinoff我已添加查詢 – Lars

回答

0

據我瞭解,你有12個記錄,一個月一個。並沒有日期時間提取月份,季度,星期,...

我修改了以前的答案,加入row_number()作爲一個星期的數字。

記住:

這不是真正的週數

它只是每月除以4,這意味着一年48周。

select year, month, quarter, 
      row_number() over (partition by year order by year,month,quarter) as week, 
      value/4 as week_value 
    from t1, 
     (SELECT UNNEST(ARRAY[1, 2, 3, 4])) b; 

檢查在這裏:http://rextester.com/XUQRK94308

+0

謝謝你這是我需要的。我知道這不是真正的週數。我希望我能找到解決這個問題的辦法,但目前這沒問題。謝謝 – Lars

0

您可以運行一週粘結到運行一個月 - 如果本週在二月它屬於二月,不管它在3月結束,如果是的話,你可以JOIN開始他們喜歡這裏:

t=# select 
    wom "week of month", mn "month", wn "week", amount/max(wom) over(partition by mn) 
from (
with 
    weeks as (select generate_series('2016-01-01'::date,'2017-01-01'::date,'1 week'::interval) w) 
, months as (select generate_series('2016-01-01'::date,'2017-01-01'::date,'1 month'::interval) m) 
select *, 78954 amount, dense_rank() over (partition by m order by w) wom, dense_rank() over (order by m) mn, dense_rank() over (order by w) wn 
from weeks 
join months on date_trunc('month',w) = m 
) p 
; 
week of month | month | week | ?column? 
---------------+-------+------+---------- 
      1 |  1 | 1 | 15790 
      2 |  1 | 2 | 15790 
      3 |  1 | 3 | 15790 
      4 |  1 | 4 | 15790 
      5 |  1 | 5 | 15790 
      1 |  2 | 6 | 19738 
      2 |  2 | 7 | 19738 
      3 |  2 | 8 | 19738 
      4 |  2 | 9 | 19738 
      1 |  3 | 10 | 19738 
      2 |  3 | 11 | 19738 
      3 |  3 | 12 | 19738 
      4 |  3 | 13 | 19738 
      1 |  4 | 14 | 15790 
      2 |  4 | 15 | 15790 
      3 |  4 | 16 | 15790 
      4 |  4 | 17 | 15790 
      5 |  4 | 18 | 15790 
      1 |  5 | 19 | 19738 
      2 |  5 | 20 | 19738 
      3 |  5 | 21 | 19738 
      4 |  5 | 22 | 19738 
      1 |  6 | 23 | 19738 
      2 |  6 | 24 | 19738 
      3 |  6 | 25 | 19738 
      4 |  6 | 26 | 19738 
      1 |  7 | 27 | 15790 
      2 |  7 | 28 | 15790 
      3 |  7 | 29 | 15790 
      4 |  7 | 30 | 15790 
      5 |  7 | 31 | 15790 
      1 |  8 | 32 | 19738 
      2 |  8 | 33 | 19738 
      3 |  8 | 34 | 19738 
      4 |  8 | 35 | 19738 
      1 |  9 | 36 | 15790 
      2 |  9 | 37 | 15790 
      3 |  9 | 38 | 15790 
      4 |  9 | 39 | 15790 
      5 |  9 | 40 | 15790 
      1 | 10 | 41 | 19738 
      2 | 10 | 42 | 19738 
      3 | 10 | 43 | 19738 
      4 | 10 | 44 | 19738 
      1 | 11 | 45 | 19738 
      2 | 11 | 46 | 19738 
      3 | 11 | 47 | 19738 
      4 | 11 | 48 | 19738 
      1 | 12 | 49 | 15790 
      2 | 12 | 50 | 15790 
      3 | 12 | 51 | 15790 
      4 | 12 | 52 | 15790 
      5 | 12 | 53 | 15790 
(53 rows)