2016-12-16 21 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)