在10天内创建滚动array_agg列

时间:2018-02-13 20:35:03

标签: sql postgresql postgresql-9.6

我试图在10天内创建一个滚动数组的列。

我用表格列出一张表:

row_id | date_end    | user_id | item_id
1186     '2017-11-06'  3908805   158
59801    '2017-11-16'  3249668   157
59800    '2017-11-16'  3249668   158
59802    '2017-11-16'  3249668   158
59799    '2017-11-16'  3249668   157
61678    '2017-11-17'  3249668   158
61679    '2017-11-17'  3249668   157

我想针对即将到来的10天窗口创建array_agg滚动聚合数组(item_id)。

目前我尝试过:

select a.row_id, a.date_end, a.user_id, array_agg(b.item_id)
from table1 as a
join table1 as b on a.row_id = b.row_id
and b.date_end between (a.date_end - interval '10 days') and a.date_end
group by a.row_id, a.date_end, a.user_id
order by a.row_id, a.date_end

但这不是将item_id聚合到一个数组中。只附加一个int值。

Sql在这里小提琴:http://sqlfiddle.com/#!17/696ed/4/0

我正在使用PostgreSQL 9.6

1 个答案:

答案 0 :(得分:0)

假设您需要分组,这可以为您提供所需的结果:

select a.date_end, a.user_id, array_agg(b.item_id)
from table1 as a
join table1 as b on a.row_id = b.row_id
and b.date_end between (a.date_end - interval '10 days') and a.date_end
group by a.date_end, a.user_id
order by a.date_end

您需要汇总所需的GROUP BY列。如果按所有列分组,则无法获得聚合。