Note that there are some explanatory texts on larger screens.

plurals
  1. POHourly report for data warehouse
    primarykey
    data
    text
    <p>I have the following tables in my Postgresql 9.1 database</p> <pre><code> SELECT * from hour_dimension limit 10; id | date | hour - -+------------+------ 1 | 2013-01-01 | 5 2 | 2013-01-01 | 6 3 | 2013-01-01 | 7 4 | 2013-01-01 | 8 5 | 2013-01-01 | 9 6 | 2013-01-01 | 10 7 | 2013-01-01 | 11 8 | 2013-01-01 | 12 9 | 2013-01-01 | 13 10 | 2013-01-01 | 14 SELECT shop_id, trans_date_time::date as date, extract(hour from trans_date_time) as hour, round(amount_in_cents/100.1,2) as amount FROM transaction LIMIT 10; shop_id | date | hour | amount --------+------------+------+-------- 2877 | 2013-01-02 | 9 | 3.50 2877 | 2013-01-02 | 10 | 4.00 2877 | 2013-01-02 | 14 | 4.00 2877 | 2013-01-03 | 11 | 1.40 2877 | 2013-01-03 | 11 | 4.50 2877 | 2013-01-03 | 12 | 3.00 2877 | 2013-01-03 | 13 | 2.00 2877 | 2013-01-03 | 13 | 2.00 2877 | 2013-01-03 | 14 | 1.00 2877 | 2013-01-04 | 9 | 4.00 SELECT id from shop limit 3; id ------ 2877 2878 2879 </code></pre> <p>I am trying to write a data-warehouse type query so I can generate (and store) a daily report describing how each shop has performed on an hourly basis, similar to the following:</p> <pre><code> date | hour | shop_id | amount -----------+------+----------+-------- 2013-01-01 | 5 | 2877 | 0.00 2013-01-01 | 6 | 2877 | 0.00 2013-01-01 | 7 | 2877 | 0.00 2013-01-01 | 8 | 2877 | 0.00 2013-01-01 | 9 | 2877 | 3.50 2013-01-01 | 10 | 2877 | 4.00 2013-01-01 | 11 | 2877 | 5.90 2013-01-01 | 12 | 2877 | 3.00 2013-01-01 | 13 | 2877 | 4.00 2013-01-01 | 14 | 2877 | 1.00 </code></pre> <p>SAMPLE QUERY:</p> <pre><code>SELECT hd.date as date, hd.hour as hour, shop_id, round(sum(case when amount is null then 0 else amount end),2) as amount FROM ( SELECT shop_id, trans_date_time::date as date, extract(hour from trans_date_time) as hour, amount_in_cents/100.0 as amount FROM transaction ) x RIGHT JOIN hour_dimension hd ON (hd.date = x.date AND hd.hour = x.hour) AND shop_id = 2877 where hd.date = '2013-01-10' GROUP BY hd.date, hd.hour, shop_id ORDER by hd.date, hd.hour LIMIT 10; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload