循环播放PostgreSQL中的唯一日期

时间:2016-09-27 14:44:23

标签: postgresql

在Python(pandas)中,我从数据库中读取数据,然后每天使用数据透视表来聚合数据。我正在处理的原始数据是每天大约200万行,它是每人每30分钟。我将它聚合为每日,所以它对于可视化来说要小很多。

所以在pandas中,我会将每个日期读入内存并将其聚合,然后将其加载到postgres中的新表中。

如何直接在postgres中执行此操作?我可以循环遍历表格中的每个唯一report_date,groupby,然后将其附加到另一个表格中吗?我假设在postgres中执行它会比在python中通过网络读取它,写一个临时的.csv文件,然后通过网络再次写入它。

1 个答案:

答案 0 :(得分:1)

这是一个例子:假设你有一个表

CREATE TABLE post (
    posted_at timestamptz not null,
    user_id integer not null,
    score integer not null
);

表示各个用户从他们在论坛中所做的帖子中获得的分数。然后是以下查询

SELECT user_id, posted_at::date AS day, sum(score) AS score
FROM post
GROUP BY user_id, posted_at::date;

将汇总每位用户每天的得分。

请注意,这将考虑当天00:00 UTC的变化(就像SO一样)。如果你想要一个不同的时间,比如巴黎时间的午夜时间,那么你可以这样做:

SELECT user_id, (posted_at AT TIME ZONE 'Europe/Paris')::date AS day, sum(score) AS score
FROM post
GROUP BY user_id, (posted_at AT TIME ZONE 'Europe/Paris')::date;

要获得上述查询的良好性能,您可能希望在(user_id, posted_at::date)上创建(计算)索引,或者对第二种情况类似地创建(计算)索引。