2016-11-08 90 views
0

我想在Hive中创建一个具有三列的表(表A)。此表的时间从上午5点开始,到次日凌晨2点结束。每一行都是距前一行5分钟的增量。在SQL中创建时间范围

前两列是这个(我不知道如何产生这个)。

start_time | end_time 
    5:00:00 | 5:05:00 
    5:05:01 | 5:10:00 
... 
23:55:01 | 00:00:00 
... 
    1:55:01 | 02:00:00 

有没有人知道如何做到上述?

为了进一步了解一些背景:

一旦我有表A创建的,我想用用另一个表(表二),我有划时代次,每次代表一个客户的访问记录,提取必要的小时/分钟/秒信息,然后提供表A第三列中每个时间间隔的访问者总数,例如“customer_count”。

我想我知道该怎么为表A“customer_count”一栏,但是,我需要与正在前两列在表A

+1

会像这样帮助接收时间? http://www.codeproject.com/Questions/1081297/Split-time-with-mins-interval-in-sql-server – Aron

+0

@Aron:感谢您的提示!我相信Hive不支持递归CTE。我尝试了一种方法,利用它,我认为我发布之前在SO中找到了它。 – smali

回答

0

你可以做它周围的其他方法帮助计算:

  1. 作物从表B中你有兴趣
  2. 组日期5个分钟为增量(计算由(time-start_time)/60/5假设时期是以秒为单位)
  3. 然后转动增量回日期和计算的S的Econd end_time

事情是这样的:

select from_unixtime(<start time> + period*60*5), 
     from_unixtime(<start time> + (period+1)*60*5), 
     count from 
    (select (time-<start time>)/(60*5) as period,count(*) as count from tableB 
    where time >= <start time> and time <= <end time> 
    group by (time-<start time>)/(60*5)) inner 

请注意,你不会用零计数(期间没有访问)

+0

嗨亚历克斯,只是想非常感谢你的答案! – smali

+0

嗨@smali,如果您对答案满意,您可以接受 - 答案附近的绿色复选标记。 –