【问题标题】:Grouping timestamps by day, not by time按天分组时间戳,而不是按时间分组
【发布时间】:2013-01-24 02:47:16
【问题描述】:

我有一个表,用于存储我运行的 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

通常还有其他 where 条件,但它们与问题无关。我正在使用 Postgres,但我假设使用的任何功能都可以在其他语言中使用。

我将结果提取到一个 Python 脚本中,该脚本计算每个日期的查看次数,但如果数据库可以为我分组和计数,这对我来说更有意义。

如何将其剥离,使其按天分组而忽略时间?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:
    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
    

    【讨论】:

    • PostgreSQL 快捷方式:user_logs.timestamp::date 而不是 date_trunc('day', user_logs.timestamp)
    • @Igor 请注意,转换为::date 会丢失时区信息,而date_trunc 不会。如果您想比较两年中的同一天并且那一天从一个时区更改为另一个时区,这可能很重要。
    猜你喜欢
    • 2015-02-12
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 2018-09-04
    • 2011-10-13
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多