如何查询和获取具有相同列值的连续行

时间:2015-11-28 09:48:45

标签: sql ruby-on-rails postgresql

我有activities public_activity生成的gem表格。其中两个字段key owner_id与其他字段相同。

我正在尝试根据owner_idkey列查询中的活动。 所以,如果我们有这些数据:

|  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)

关于如何构建必要查询的任何想法都非常受欢迎。

2 个答案:

答案 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)

使用array_agg()

select owner_id,key, array_agg(id) chunks 
from t
group by  1,2
order by 3  

Demo

string_agg()

select owner_id,key,string_agg(id::text,',') chunks 
from t 
group by 1,2
order by 3

Demo

根据OP的comment

select owner_id,key
      , array_agg(id) chunks 
from t 
group by 1,2 order by 3 desc limit 1