如何基于事件类型数据填充行

lf3rwulv  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(343)

所以我的表有两列:hour和customerid。每位顾客将有两排,一排对应他/她进入商店的时间,一排对应他/她离开商店的时间。有了这些数据,我想创建一个表,该表包含客户在商店的每一个小时。例如,一个客户x在下午1点进入商店,下午5点离开,因此将有5行(每小时1行),如下面的屏幕截图所示。
我的尝试是:

select
    hour
    ,first_value(customer_id) over (partition by customer_id order by hour rows between unbounded preceding and current row) as customer_id
FROM table

mwngjboj

mwngjboj1#

假设:
你在跑博士后
给定的客户在表中总是正好有两行 hour 日期类似于数据类型
那么一个选择就是使用 generate_series() 横向连接,如:

select t.customer_id, x.hour
from (
    select customer_id, min(hour) min_hour, max(hour) max_hour 
    from mytable 
    group by customer_id
) t
cross join lateral generate_series(min_hour, max_hour, '1 hour') x(hour)
order by t.customer_id, x.hour

db fiddlde上的演示:

customer_id | hour               
:---------- | :------------------
X           | 2019-04-01 13:00:00
X           | 2019-04-01 14:00:00
X           | 2019-04-01 15:00:00
X           | 2019-04-01 16:00:00
X           | 2019-04-01 17:00:00
Y           | 2019-04-01 17:00:00
Y           | 2019-04-01 18:00:00
Y           | 2019-04-01 19:00:00

相关问题