Hi Alex,

On Thu, Apr 16, 2020 at 10:36 AM Alex Magnum <magnum11...@gmail.com> wrote:

> Hi,
> I have a simple table with singup timestamps
>
> What I would like to do is to create a table as shown below that displays
> the counts per our for the past n dates.
>
> I can do this with a function but is there an easy way to use recursive
> queries?
>
>
> *     Counts per hour for given date*
>
> *HR   2020-04-01  2020-04-02  ... 2020-04-10*00      38           33
>          36
> 01      33           26              18
> 02      26           36              17
> 03      36           18              10
> 04      18           17               3
> 05      17           10               3
> 06      10            3               6
> 07       3            3              10
> .        3            6              13
> .        6           10              22
> .       10           13              12
> 22      13           22               9
> 23      22           11               8
>
> Thanks for any suggestions.
> A
>

You don't need subqueries. The WHEN statement can help you in this case (a
bit tedious to write but fast to run):

WITH q AS (select date_part('hour', ts) AS hr, ts::date AS mydate FROM
your_table_or_query)
SELECT hr,
    sum(CASE WHEN mydate = '2020-04-01'::date THEN 1 ELSE 0 END),
    sum(CASE WHEN mydate = '2020-04-02'::date THEN 1 ELSE 0 END),
    ...
FROM q ORDER BY hr;


Hope it helps
--
Olivier Gautherot
Tel: +33 6 02 71 92 23
https://www.linkedin.com/in/ogautherot/

Reply via email to