我试图在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
答案 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
列。如果按所有列分组,则无法获得聚合。