【问题标题】:Take last 3 hours and group by 5 minutes [duplicate]花费最后 3 小时并按 5 分钟分组 [重复]
【发布时间】:2021-09-28 01:53:11
【问题描述】:

我想知道您是否可以帮我编写一个查询,该查询应该只 SELECT count(*) 但只包含过去 3 小时的数据并将其按 5 分钟分组。

所以我有一张桌子,上面有一个 createdts,所以我在那里有日期。我只想查看过去 3 小时内有多少条目,但每 5 分钟分组 COUNT(*)。

SELECT COUNT(*) 
FROM mytable 
WHERE createdts >= now()::date - interval '3 hour'
GROUP BY 'every 5 minutes'

另外,真正重要的是 Count(*)'s 为空,默认为 0。我有很多时间窗口数据将为空,将其默认为 0 可以在以后省去很多麻烦

【问题讨论】:

    标签: sql postgresql group-by


    【解决方案1】:

    使用generate_series():

    SELECT gs.t, COUNT(t.createdts)
    FROM GENERATE_SERIES(now()::date - interval '3 hour', now()::date, interval '5 minute') gs(t)
         mytable t
         ON t.createdts >= gs.t AND
            t.createdts < gs.t + interval '5 minute'
    GROUP BY gs.t;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 2017-03-22
      • 2021-05-10
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2014-04-03
      相关资源
      最近更新 更多