Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何根据事件类型数据填充行_Sql_Postgresql_Date_Select_Group By - Fatal编程技术网

Sql 如何根据事件类型数据填充行

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

因此,我的表有两列: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 
假设:

  • 你在参加博士后考试

  • 给定的客户在表中总是正好有两行

  • 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都会被过滤掉。