Home > Software engineering >  Redshift: Add Row for each hour in a day
Redshift: Add Row for each hour in a day

Time:04-26

I have a table contains item_wise quantity at different hour of date. trying to add data for each hour(24 enteries in a day) with previous hour available quantity. For example for hour(2-10), it will be 5.

  1. I created a table with hours enteries (1-24) & full join with shared table.

How can i add previous available entry. Need suggestion

item_id| date       | hour| quantity
101    | 2022-04-25 | 2   | 5
101    | 2022-04-25 | 10  | 13
101    | 2022-04-25 | 18  | 67
101    | 2022-04-25 | 23  | 27

CodePudding user response:

You can try to use generate_series to generate hours number, let it be the OUTER JOIN base table,

Then use a correlated-subquery to get your expect quantity column

SELECT t1.*,
       (SELECT quantity 
        FROM T tt 
        WHERE t1.item_id = tt.item_id 
        AND t1.date = tt.date 
        AND t1.hour >= tt.hour
        ORDER BY tt.hour desc
        LIMIT 1) quantity
FROM (
    SELECT DISTINCT item_id,date,v.hour
    FROM generate_series(1,24) v(hour)
    CROSS JOIN T
) t1
ORDER BY  t1.hour

CodePudding user response:

Provided the table of int 1 .. 24 is all24(hour) you can use lead and join

select t.item_id, t.date, all24.hour, t.quantity
from all24
join ( 
     select *,
        lead(hour, 1, 25) over(partition by item_id, date order by hour) - 1 nxt_h
     from tbl
) t on all24.hour between t.hour and t.nxt_h
  • Related