我想编写一个HiveQL查询,每次发生事件/live//activate
时返回一些设备,并且每天一小时返回一次。这是我的表格的样子:
问题是我必须根据每个小时的间隔24次更改和重写我的查询。
例如,如果我想要在4:00 AM到5:00 AM之间的设备数量,我写的查询是:
SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN ' 2018-01-26 04:00:00' AND ' 2018-01-26 05:00:00';
如果您对查询有任何了解,可以让我获得当天每个小时的设备数量,而不是重写我的查询24次,我将非常感谢。
答案 0 :(得分:0)
试试这个:
SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN from_unixtime(unix_timestamp('',"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000') AND from_unixtime(unix_timestamp('',"yyyy-MM-dd hh:mm:ss.sss")+3600);
编辑:
SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN date_format(unix_timestamp(), 'YYYY-MM-DD hh:00:00.000') AND date_format(unix_timestamp()+3600, 'YYYY-MM-DD hh:00:00.000')
编辑2:
SELECT count(equipement) FROM parcours_fin WHERE event=' /live//activate' AND `date` BETWEEN from_unixtime(unix_timestamp(unix_timestamp(),"yyyy-MM-dd hh:mm:ss.sss"),'yyyy-MM-dd hh:00:00.000') AND from_unixtime(unix_timestamp(unix_timestamp(),"yyyy-MM-dd hh:mm:ss.sss")+3600);
编辑3(工作解决方案):
SELECT count(equipement), date_format(`date`, "yyyy-MM-dd hh:00:00.000 aa")
FROM parcours_fin WHERE event=' /live//activate'
group by date_format(`date`, "yyyy-MM-dd hh:00:00.000 aa") ;
答案 1 :(得分:0)
您可以使用group by执行此操作。我建议将日期信息添加到组中以便白天获取。以下查询获取每天每小时的计数,您可以在where条件中添加一个额外的子句以按天过滤
SELECT count(equipement), hour(`date`), date_format(date`, "yyyy-MM-dd")
FROM parcours_fin WHERE event=' /live//activate'
group by hour(`date`), date_format(date`, "yyyy-MM-dd") ;
答案 2 :(得分:0)
答案 3 :(得分:0)
全天24小时使用完全加入以获取每小时的记录。
演示:
select count(equipement) cnt, h.hr hour
from
(--replace with your query
select 1 as equipement, hour('2018-01-26 04:00:00' ) as hr --calculate each record hour for the join
) your_table
full join --join with all 24 hours
(select stack(24,
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23
) as hr
)h on your_table.hr=h.hr
group by h.hr;
输出:
OK
cnt hour
0 0
0 1
0 2
0 3
1 4
0 5
0 6
0 7
0 8
0 9
0 10
0 11
0 12
0 13
0 14
0 15
0 16
0 17
0 18
0 19
0 20
0 21
0 22
0 23
Time taken: 83.921 seconds, Fetched: 24 row(s)
计算每小时的数据。这是我的例子中唯一记录数据的记录,小时= 4,它显示在结果中。