70

我有一个表来存储我运行的 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 脚本中,该脚本计算每个日期的查看次数,但如果数据库可以对我进行分组和计数,这对我来说更有意义。

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

4

1 回答 1

149
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
于 2013-02-08T11:01:19.253 回答