Sql 如何根据事件类型数据填充行
因此,我的表有两列:hour和customerID。每个客户将有两行,一行对应于他/她进入商店的时间,另一行对应于他/她离开商店的时间。有了这些数据,我想创建一个表,该表记录客户在商店的每一小时。例如,一个客户X在下午1点进入商店,下午5点离开,因此会有5行(每小时1行),如下面的屏幕截图所示 以下是我现在的尝试:Sql 如何根据事件类型数据填充行,sql,postgresql,date,select,group-by,Sql,Postgresql,Date,Select,Group By,因此,我的表有两列:hour和customerID。每个客户将有两行,一行对应于他/她进入商店的时间,另一行对应于他/她离开商店的时间。有了这些数据,我想创建一个表,该表记录客户在商店的每一小时。例如,一个客户X在下午1点进入商店,下午5点离开,因此会有5行(每小时1行),如下面的屏幕截图所示 以下是我现在的尝试: select hour ,first_value(customer_id) over (partition by customer_id order by hour
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
假设:
- 你在参加博士后考试
- 给定的客户在表中总是正好有两行
的数据类型类似于日期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
:
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
客户id小时
:---------- | :------------------
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
晚起的雪花。请仅标记您正在使用的一个数据库。如果一个客户有两行以上(例如,同一个客户稍后返回商店),该怎么办?
hour
列的数据类型是什么?@GMB-已删除雪花。小时被截断为最接近的时间戳hour@GMB-我们可以假设每个客户有2行(一行用于进入,一行用于退出),任何偏离的客户ID都会被过滤掉。