sql - PostgreSQL:给定特定时间间隔的一周中每一天的记录计数

标签 sql postgresql group-by count

我正在尝试获取特定时间间隔内每天的记录数(>= 星期一早上 7 点和 < 星期二早上 7 点,>= 星期二早上 7 点和星期三早上 7 点 <)并且模式继续.这是我的表结构

TABLE Name: test_table
|---------------------|------------------|-------------------------|
|          id         |        name      |        occured_at       |
|---------------------|------------------|-------------------------|

我可以使用下面的查询来计算我每天有多少条记录,但我很确定它只计算当天上午 12 点到晚上 11:59 之间的条目。

SELECT COUNT(id),name AS ord_name, date_trunc('day', occured_at) AS ord_date
FROM test_table
GROUP BY ord_name, ord_date
ORDER BY ord_date

结果:

|count|ord_name|        ord_date      |
|-----|--------|----------------------|
| 20  |  ord1  |2019-02-01 00:00:00+00|
| 25  |  ord1  |2019-02-02 00:00:00+00|
| 30  |  ord1  |2019-02-03 00:00:00+00|
| 15  |  ord1  |2019-02-04 00:00:00+00|

我还尝试通过将 24 小时添加到我的 occured_at COLUMN 中来使用 INTERVAL,但我无法使其工作。

SELECT COUNT(id),name AS ord_name, date_trunc('day', occured_at) AS ord_date
FROM test_table
WHERE ord_date::time >= '07:00:00' + INTERVAL '24 hour'
GROUP BY ord_name, ord_date
ORDER BY ord_date

示例数据:

| id  |  name  |       occured_at     |
|-----|--------|----------------------|
| 1   |  ord1  |2019-02-01 07:00:00+00|
| 2   |  ord1  |2019-02-01 12:30:00+00|
| 3   |  ord1  |2019-02-02 06:58:00+00|
| 4   |  ord1  |2019-02-02 07:01:00+00|
| 5   |  ord1  |2019-02-03 07:00:00+00|
| 6   |  ord1  |2019-02-04 06:59:00+00|

预期结果:

|count |ord_name |ord_date  |
|------|---------|----------|
| 3    |  ord1   |2019-02-01|
| 1    |  ord1   |2019-02-02|
| 2    |  ord1   |2019-02-03|

最佳答案

由于在这种情况下您的一天从早上 7 点开始,因此您可以通过减去 7 小时来重新表述您的日期。这样一来,早上 7 点整的日期就好像是当天的开始。

SELECT
    COUNT(id),
    name AS ord_name,
    date_trunc('day', occured_at - interval '7 hour') AS ord_date
FROM test_table
GROUP BY
    name,
    date_trunc('day', occured_at - interval '7 hour')
ORDER BY
    ord_date;

enter image description here

Demo

关于sql - PostgreSQL:给定特定时间间隔的一周中每一天的记录计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54652643/

相关文章:

sql - 获得嵌套选择权的问题

mysql - 复制表并在 MySQL 中添加带有值的新第一列

ruby-on-rails - 允许 Rails 中的空值的唯一索引

SQL 窗口函数 : Performance impact of returning the same avg() many times?

带有变量的 Python SQL 语句,使用 psycopg2 库

c# - 按 id 对 List<T> 中的对象进行分组,并按每个对象的 duplicateCount 对列表进行排序

php - 如何在数据层管理SQL语句

sql - 我可以基于多列聚合数据库数据吗?

javascript - 如何通过多个键对 JSON 数组数据进行分组

SQL 分组依据状态