【问题标题】:Postgresql SQL query: getting a count of everyday within a periodPostgresql SQL查询:获取一段时间内每天的计数
【发布时间】:2014-04-11 14:03:46
【问题描述】:

最近我想在 PostgreSQL 上做一个 sql 查询,它可以计算某个时间段(一个月或一天等)的每天(或可能每小时)的表记录。

换句话说,一个周期(月)的每一天的循环。

我该怎么做?

我希望记录可以是这样的:

--------------------
count | day | month |
1     | 1   |  4    |
1     | 2   |  4    |
1     | 3   |  4    |
1     | 4   |  4    |
1     | 5   |  4    |

更新:

我有一个名为visitors的表:

first_seen:date_time; last_seen:日期时间; id: 整数

我想计算一个月中每一天的总访问量。但由于访问者一次可以出现超过多天,即停留 3 天。我发现一个简单的 count(id) 不能解决问题。

更新 2:

这是我到目前为止所做的,但显然是错误的。

SELECT count("visitors"."id"), 

EXTRACT(hour from visitors.last_seen) AS hour, 
EXTRACT(day from "visitors"."last_seen") AS date, 
EXTRACT(month from "visitors"."last_seen") AS month 

FROM "visitors"
WHERE (("visitors"."first_seen" between '2014-04-09 15:30:07.423401' and '2014-04-10 15:30:07.423476') 
or ("visitors"."last_seen" between '2014-04-09 15:30:07.423401' and  '2014-04-10 15:30:07.423476') 
or ("visitors"."first_seen" < '2014-04-09 15:30:07.423401' and "visotors".last_seen > '2014-04-10 15:30:07.423476')) 

GROUP BY month,date,hour ORDER BY month asc, date asc , hour asc

抱歉信息不足。

【问题讨论】:

  • 初始数据集是什么样的?
  • 架构是什么样的?到目前为止,您尝试过什么?
  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需要。正如目前所写的那样,很难准确地说出你在问什么。请提供您尝试过的查询和示例数据。

标签: sql postgresql postgresql-9.1


【解决方案1】:

您可以使用 generate_series 来填补访问者统计周期时的空白数据。 然后分组。 对于经验:

select count(id),
EXTRACT(hour from visitors.last_seen) AS hour, 
EXTRACT(day from "visitors"."last_seen") AS date, 
EXTRACT(month from "visitors"."last_seen") AS month 
from
(select id,generate_series(first_seen,last_seen,'1 hour'::interval) from tbl) t
where ...
GROUP BY month,date,hour 

ORDER BY month asc, date asc , hour asc

【讨论】:

    【解决方案2】:

    使用DATE_TRUNC 函数。

    SELECT count(id),
           date_trunc('day', last_seen) AS DATE
     FROM visitors
      GROUP BY date_trunc('day', last_seen);
    

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多