我有activities
public_activity
生成的gem
表格。其中两个字段key
owner_id
与其他字段相同。
我正在尝试根据owner_id
和key
列查询块中的活动。
所以,如果我们有这些数据:
| id | owner_id | key |
| ---- | ---------- | -------------- |
| 1 | 1 | product.create |
| 2 | 1 | product.create |
| 3 | 1 | product.update |
| 4 | 2 | product.update |
| 5 | 2 | product.destroy |
| 6 | 2 | product.destroy |
| 7 | 2 | product.destroy |
| 8 | 1 | product.create |
| 9 | 1 | product.create |
块会匹配行。 由ids代表:
[1,2]
[3]
[4]
[5,6,7]
[8,9]
Chunks 将通过ajax一次加载一个,因此查询前面会有条件where(id > the_last_activity_fetched_id)
关于如何构建必要查询的任何想法都非常受欢迎。
答案 0 :(得分:1)
您可以使用array_agg:
实现此目的select key,owner_id , array_agg(id) chunks from
(select key,owner_id,id from my_table order by id) A
group by key,owner_id
order by chunks
以下是一个示例:SQLFIDDLE
答案 1 :(得分:1)
select owner_id,key, array_agg(id) chunks
from t
group by 1,2
order by 3
或
select owner_id,key,string_agg(id::text,',') chunks
from t
group by 1,2
order by 3
根据OP的comment
select owner_id,key
, array_agg(id) chunks
from t
group by 1,2 order by 3 desc limit 1