将所有带有 groupby 时间戳的计数按小时间隔计算

get count all with groupby timestamp into hourly intervals

我有一个配置单元 table,它有一个字符串格式的时间戳,如下所示,

20190516093836, 20190304125015, 20181115101358

我想按如下所示将具有聚合时间戳的行计数转换为每小时

date_time               count
-----------------------------
2019:05:16: 00:00:00    23
2019:05:16: 01:00:00    64

我跟进了几个 类似的方法,但仍无法生成所需的结果。

这是我的最终查询:

SELECT 
    DATE_PART('day', b.date_time) AS date_prt, 
    DATE_PART('hour', b.date_time) AS hour_prt, 
    COUNT(*)   
FROM
    (SELECT 
         from_unixtime(unix_timestamp(`timestamp`, "yyyyMMddHHmmss")) AS date_time 
     FROM table_name
     WHERE from_unixtime(unix_timestamp(`timestamp`, "yyyyMMddHHmmss")) 
           BETWEEN '2018-12-10 07:02:30' AND '2018-12-12 08:02:30') b
GROUP BY
    date_prt, hour_prt

希望得到您的指导,在此先感谢

您可以提取 date_time 所需的格式 'yyyy-MM-dd HH:00:00'。我更喜欢使用 regexp_replace:

SELECT 
    date_time, 
    COUNT(*) as `count`
FROM
    (SELECT 
         regexp_replace(`timestamp`, '^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$','-- :00:00') AS date_time 
     FROM table_name
     WHERE regexp_replace(`timestamp`, '^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$','-- ::')
           BETWEEN '2018-12-10 07:02:30' AND '2018-12-12 08:02:30') b
GROUP BY
    date_time

这也适用:

from_unixtime(unix_timestamp('20190516093836', "yyyyMMddHHmmss"),'yyyy-MM-dd HH:00:00') AS date_time