我试着在特定的时间间隔(周一早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小时来使用“间隔”,但我无法使其工作。
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;

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

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

10-11 03:21