【问题标题】:get count all with groupby timestamp into hourly intervals使用 groupby 时间戳将所有计数计入每小时间隔
【发布时间】:2022-01-09 01:01:50
【问题描述】:

我有一个配置单元表,其时间戳为字符串格式,如下所示,

20190516093836, 20190304125015, 20181115101358

我想将带有聚合时间戳的行数按如下所示每小时计算一次

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

我像这样关注了几个links,但还无法产生想要的结果。

这是我的最终查询:

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

希望大家多多指教,先谢谢了

【问题讨论】:

    标签: sql hive timestamp impala


    【解决方案1】:

    您可以提取所需格式的 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})$','$1-$2-$3 $4:00:00') AS date_time 
         FROM table_name
         WHERE regexp_replace(`timestamp`, '^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})$','$1-$2-$3 $4:$5:$6')
               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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多