【发布时间】:2017-03-13 08:12:47
【问题描述】:
我最近开始使用 postgres,我来自 oracle 背景。只是想知道我写的查询是否可以在 postgres 中以更好的方式实现。
问题详情:
我有两张桌子:
- usage_detail
- Program_info
Usage_detail 包含有关观看频道的任何用户的信息。例如,用户 A 的会话长度为 1 小时 10 分 0 秒,从今天下午 1:15 开始
User start_time end_time
A 2016-10-31 13:15:00 2016-10-31 14:25:00
Program_info 表包含预定的节目详情和相应的类别。
例如:
Program_id program_category week_day start_time end_time
1 News Monday 13:00 13:30
2 Sports Monday 13:30 14:30
我正在寻找的输出是:
User program_category start_time duration (in seconds)
A News 2016-10-31 13:15:00 900
A Sports 2016-10-31 13:30:00 3300
我目前的做法:
我将 start_time 和 end_time 持续时间分为 30 分钟间隔(因为节目类别可能每 30 分钟更改一次)。就像我提到的示例一样,我首先创建了 3 条记录(从下午 1:15 到下午 1:30、下午 1:30 到下午 2:00、下午 2:00 到下午 2:25)然后根据 program_category 对持续时间求和.
我写了一些可读性差的代码,它动态地从一条记录中生成多条记录,而不使用 postgres 的数组和 unnest 功能。
谁能建议使用 Array/unnest 或 postgres 中可用的任何其他功能来解决此问题的最佳方法?我不是在寻找确切的代码,只是在寻找方向。
【问题讨论】:
-
在我的世界,2016-10-31 是星期一而不是星期日。
-
我稍后才意识到,将编辑。它在印度的排灯节时间,假期开始了,感觉就像星期天。 :D
标签: sql arrays postgresql unnest