按时间分组时间戳,而不是按时间分组

Tei*_*ion 34 sql postgresql

我有一个表存储我运行的Web服务的用户访问/查看日志.它将时间跟踪为时间戳虽然我发现当我汇总报告时我只关心当天,而不是时间.

我目前正在运行以下查询:

SELECT user_logs.timestamp
    FROM user_logs
        WHERE user_logs.timestamp >= %(timestamp_1)s
            AND user_logs.timestamp <= %(timestamp_2)s
                ORDER BY user_logs.timestamp
Run Code Online (Sandbox Code Playgroud)

通常还有其他条件,但它们对问题无关紧要.我正在使用Postgres,但我认为使用的任何功能都适用于其他语言.

我将结果拉入Python脚本,该脚本计算每个日期的视图数量,但如果数据库可以对我进行分组和计数,那么对我来说更有意义.

如何剥离它以便它按天分组并忽略时间?

Clo*_*eto 69

SELECT date_trunc('day', user_logs.timestamp) "day", count(*) views
FROM user_logs
WHERE user_logs.timestamp >= %(timestamp_1)s
    AND user_logs.timestamp <= %(timestamp_2)s
group by 1
ORDER BY 1
Run Code Online (Sandbox Code Playgroud)

  • PostgreSQL快捷方式:`user_logs.timestamp :: date`而不是`date_trunc('day',user_logs.timestamp)`. (47认同)
  • @Igor请注意,对于`:: date`的强制转换会丢失时区信息,而`date_trunc`则不会.当你想比较同一天两年,那一天从一个时区变为另一个时区时,这可能很重要. (16认同)