首页 > 解决方案 > 获取 Time 的每日行数

问题描述

我的数据库表如下所示:

CREATE TABLE record 
(
    id         INT,
    status     INT,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

我想创建一个通用查询来获取最后一天间隔 3 小时后创建的记录数

例如,我想知道在过去 1 天 3 小时后创建了多少条记录。

到目前为止我所拥有的:在 stackoverflow 的帮助下,我能够创建一个查询来计算一整天的计数。

SELECT
    DATE(created_at) AS day, COUNT(1)
FROM
    record
WHERE
    created_at >= current_date - 1
GROUP BY
    DATE(created_at)

这告诉我一整天就像创建了 24 条记录,但我想知道每隔 3 小时创建多少条记录

标签: sqlpostgresqltime

解决方案


如果您想要最近三个小时的数据计数:

select count(*)
from record
where created_at >= now() - interval '3 hour';

如果您希望最后一天减去 3 小时,那就是 21 小时:

select count(*)
from record
where created_at >= now() - interval '21 hour';

编辑:

您希望过去 24 小时的间隔为 3 小时。最简单的方法可能是generate_series()

select gs.ts, count(r.created_at)
from generate_series(now() - interval '24 hour', now() - interval '3 hour', interval '3 hour') gs(ts) left join
     record r 
     on r.created_at >= gs.ts and
        r.created_at < gs.ts + interval '3 hour'
group by gs.ts
order by gs.ts;
 

推荐阅读