pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Andreas <maps.on@gmx.net>
To: Alexander Gataric <gataric@usa.net>
Cc: Filip Rembiałkowski <plk.zuber@gmail.com>
Cc: pgsql-sql@postgresql.org
Subject: Re: Re: [SQL] need some magic with generate_series()
Date: Wed, 23 Jan 2013 13:11:55 +0100
Message-ID: <50FFD38B.50301@gmx.net> (raw)
In-Reply-To: <695Rawai22960M34@ca34.cms.usa.net>
References: <695Rawai22960M34@ca34.cms.usa.net>
List-Unsubscribe: <mailto:majordomo@postgresql.org?body=unsub%20pgsql-sql>

I'm sorry to prove that daft.  :(

generate_series needs the startdate of every project to generate the 
specific list of monthnumbers for every project.
To join against this the list needs to have a column with the project_id.

So I get something like this but still I cant reference the columns of 
the projects within the query that generates the series.


with projectstart ( project_id, startdate )
as
     (
         select  project_id, startdate
         from    projects
     )

select  project_id, m
from    projectstart    as  p
     left join   (
                     select  p.project_id, to_char ( m, 'YYYYMM' )::integer
                     from    generate_series ( p.startdate, 
current_date, '1 month'::interval ) as m
                 )       as  x
     using ( project_id );




Am 23.01.2013 01:08, schrieb Alexander Gataric:
> I would create a common table expression with the series from Filip 
> and left join to the table you need to report on.
>
> Sent from my smartphone
>
> ----- Reply message -----
> From: "Andreas" <maps.on@gmx.net>
> To: "Filip Rembiałkowski" <plk.zuber@gmail.com>
> Cc: "jan zimmek" <jan.zimmek@web.de>, <pgsql-sql@postgresql.org>
> Subject: [SQL] need some magic with generate_series()
> Date: Tue, Jan 22, 2013 4:49 pm
>
>
> Thanks Filip,
> with your help I came a step further.   :)
>
> Could I do the folowing without using a function?
>
>
> CREATE OR REPLACE FUNCTION month_series ( date )
>  RETURNS table ( monthnr integer )
> AS
> $BODY$
>
>    select  to_char ( m, 'YYYYMM' )::integer
>    from    generate_series ( $1, current_date, '1 month'::interval )   
> as  m
>
> $BODY$ LANGUAGE sql STABLE;
>
>
> select  project_id, month_series ( createdate )
> from    projects
> order by 1, 2;
>
>
>
> Am 22.01.2013 22:52, schrieb Filip Rembiałkowski:
> > or even
> >
> > select m from generate_series( '20121101'::date, '20130101'::date, '1
> > month'::interval) m;
> >
> >
> >
> > On Tue, Jan 22, 2013 at 3:49 PM, jan zimmek <jan.zimmek@web.de> wrote:
> >> hi andreas,
> >>
> >> this might give you an idea how to generate series of dates (or 
> other datatypes):
> >>
> >> select g, (current_date + (g||' month')::interval)::date from 
> generate_series(1,12) g;
> >>
> >> regards
> >> jan
> >>
> >> Am 22.01.2013 um 22:41 schrieb Andreas <maps.on@gmx.net>:
> >>
> >>> Hi
> >>> I need a series of month numbers like  201212, 201301 YYYYMM to 
> join other sources against it.
> >>>
> >>> I've got a table that describes projects:
> >>> projects ( id INT, project TEXT, startdate DATE )
> >>>
> >>> and some others that log events
> >>> events( project_id INT, createdate DATE, ...)
> >>>
> >>> to show some statistics I have to count events and present it as a 
> view with the project name and the month as YYYYMM starting with 
> startdate of the projects.
> >>>
> >>> My problem is that there probaply arent any events in a month but 
> I still need this line in the output.
> >>> So somehow I need to have a select that generates:
> >>>
> >>> project 7,201211
> >>> project 7,201212
> >>> project 7,201301
> >>>
> >>> It'd be utterly cool to get this for every project in the projects 
> table with one select.
> >>>
> >>> Is there hope?
> >>>
> >>>
> >>> --
> >>> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> >>> To make changes to your subscription:
> >>> http://www.postgresql.org/mailpref/pgsql-sql
> >>
> >>
> >> --
> >> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> >> To make changes to your subscription:
> >> http://www.postgresql.org/mailpref/pgsql-sql
>
>
>
> -- 
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql



-- 
Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql



view thread (8+ messages)

Message-ID: <50FFD38B.50301@gmx.net>
Permalink:  ../50FFD38B.50301@gmx.net/
Also on:    postgresql.org/message-id/50FFD38B.50301@gmx.net

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: maps.on@gmx.net, gataric@usa.net, plk.zuber@gmail.com
  Subject: Re: Re: [SQL] need some magic with generate_series()
  In-Reply-To: <50FFD38B.50301@gmx.net>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox