Re: Showing a cumlative total by month - Mailing list pgsql-sql

From David Nelson
Subject Re: Showing a cumlative total by month
Date
Msg-id CANxyCUHcNGOs7aYaXqU5-RM8rmMD=0rW5JRdzqU83ceQOooUzA@mail.gmail.com
Whole thread Raw
In response to Re: Showing a cumlative total by month  ("David G. Johnston" <david.g.johnston@gmail.com>)
List pgsql-sql
<div dir="ltr">On Fri, Sep 11, 2015 at 10:15 AM, David G. Johnston <<a
href="mailto:david.g.johnston@gmail.com">david.g.johnston@gmail.com</a>>wrote:<br />><br />> On Fri, Sep 11,
2015at 10:46 AM, David Nelson <<a href="mailto:dnelson77808@gmail.com">dnelson77808@gmail.com</a>> wrote:<br
/>>><br/>>> I would like to add a running total column to the view, but can't quite get there. I figured
outhow to show the information I want using a CTE, but I can not figure out how to translate that to a single query to
definea view with. So I'm hoping someone can point me in the right direction.<br />>><br />><br />> -->
 <a
href="http://www.postgresql.org/docs/9.3/interactive/functions-window.html">http://www.postgresql.org/docs/9.3/interactive/functions-window.html</a><br
/>><br/>> David J.<br />>  <br /><br />Thanks David and Stuart!<br /><br />these two solutions seem to be what
I'mafter. I will apply them to the<br />production view (which is more complex), and see how they play out. But you<br
/>twopointed me in the directions that I needed to go.<br /><br />DROP VIEW upload_info;<br /><br />CREATE VIEW
upload_infoAS<br />SELECT mon,<br />       monthly_total,<br />       SUM(monthly_total) OVER (ORDER BY mon) AS
cumulative<br/>FROM (SELECT CONCAT(EXTRACT(YEAR FROM upload_date),<br />                    '-',<br
/>                   LPAD(CAST(EXTRACT(MONTH FROM upload_date) AS TEXT), 2, '0')) AS mon,<br />            
SUM(upload_size)AS monthly_total<br />      FROM uploaded_files u<br />      GROUP BY EXTRACT(MONTH FROM upload_date),
EXTRACT(YEARFROM upload_date)<br />      ORDER BY EXTRACT(YEAR FROM upload_date), EXTRACT(MONTH FROM upload_date)) AS
u;<br/><br />SELECT *<br />FROM upload_info;<br /><br />   mon   | monthly_total  |   cumulative   <br
/>---------+----------------+----------------<br/> 2014-01 |     3179135699 |     3179135699<br /> 2014-02 |    
1634499060|     4813634759<br /> 2014-03 |     4278982588 |     9092617347<br /> 2014-04 |   142238544857 |  
151331162204<br/> 2014-05 |   357240707209 |   508571869413<br /> 2014-06 |    64339859968 |   572911729381<br
/> 2014-07|    25513017728 |   598424747109<br /> 2014-08 |    11020669492 |   609445416601<br /> 2014-09 |    
1018774598|   610464191199<br /> 2014-10 |    76752535951 |   687216727150<br /> 2014-11 |     4611404964 |  
691828132114<br/> 2014-12 |    69607199452 |   761435331566<br /> 2015-01 |       15700525 |   761451032091<br
/> 2015-02|    34234715981 |   795685748072<br /> 2015-03 |  1484150449194 |  2279836197266<br /> 2015-04 |
13096208914706| 15376045111972<br /> 2015-05 |      814385166 | 15376859497138<br /> 2015-06 |      563829413 |
15377423326551<br/> 2015-07 |      656007272 | 15378079333823<br /> 2015-08 |  1828956674258 | 17207036008081<br
/> 2015-09|      822601322 | 17207858609403<br />(21 rows)<br /><br /><br /><br />DROP VIEW upload_info;<br /><br
/>CREATEVIEW upload_info AS<br />WITH upload_summary AS<br />(<br />   SELECT EXTRACT(YEAR FROM upload_date) AS
up_year,<br/>          LPAD(CAST(EXTRACT(MONTH FROM upload_date) AS TEXT), 2, '0') AS up_month,<br />         
SUM(upload_size)AS monthly_total<br />   FROM uploaded_files<br />   GROUP BY up_month, up_year<br />)<br />SELECT
u.up_year,<br/>       u.up_month,<br />       u.monthly_total,<br />       (SELECT SUM(monthly_total)<br />        FROM
upload_summary<br/>        WHERE CAST(CONCAT(up_year,<br />                          '-',<br
/>                         up_month,<br />                          '-01 00:00:00-05')<br />                   AS
TIMESTAMP)<=<br />              CAST(CONCAT(u.up_year,<br />                          '-',<br
/>                         u.up_month,<br />                          '-01 00:00:00-05')<br />                   AS
TIMESTAMP)<br/>       ) AS cumulative<br />FROM upload_summary u<br />ORDER BY up_year, up_month;<br /><br />SELECT
*<br/>FROM upload_info;<br /><br /> up_year | up_month | monthly_total  |   cumulative   <br
/>---------+----------+----------------+----------------<br/>    2014 | 01       |     3179135699 |     3179135699<br
/>   2014 | 02       |     1634499060 |     4813634759<br />    2014 | 03       |     4278982588 |     9092617347<br
/>   2014 | 04       |   142238544857 |   151331162204<br />    2014 | 05       |   357240707209 |   508571869413<br
/>   2014 | 06       |    64339859968 |   572911729381<br />    2014 | 07       |    25513017728 |   598424747109<br
/>   2014 | 08       |    11020669492 |   609445416601<br />    2014 | 09       |     1018774598 |   610464191199<br
/>   2014 | 10       |    76752535951 |   687216727150<br />    2014 | 11       |     4611404964 |   691828132114<br
/>   2014 | 12       |    69607199452 |   761435331566<br />    2015 | 01       |       15700525 |   761451032091<br
/>   2015 | 02       |    34234715981 |   795685748072<br />    2015 | 03       |  1484150449194 |  2279836197266<br
/>   2015 | 04       | 13096208914706 | 15376045111972<br />    2015 | 05       |      814385166 | 15376859497138<br
/>   2015 | 06       |      563829413 | 15377423326551<br />    2015 | 07       |      656007272 | 15378079333823<br
/>   2015 | 08       |  1828956674258 | 17207036008081<br />    2015 | 09       |      822601322 | 17207858609403<br
/>(21rows)<br /></div> 

pgsql-sql by date:

Previous
From: David Nelson
Date:
Subject: Re: Showing a cumlative total by month
Next
From: gmb
Date:
Subject: View not using index