2015-11-28 47 views
2

我有這個activities表生成的public_activitygem。其中有兩個字段keyowner_id部分來自他人。如何查詢並獲取具有相同列值的連續行

我試圖根據owner_id和列查詢區塊中的活動。 因此,如果我們有這樣的數據:

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

大塊將被裝入一個在通過AJAX一個時間,所以查詢將與條件之後where(id > the_last_activity_fetched_id)

如何建立必要的查詢是有什麼想法非常歡迎。

回答

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

+0

有一個與你給解決一個小問題。使用array_agg即使它們不是連續的,我也可以獲取所有行。請再次看看這個例子,我修改了它,以便看到我在說什麼。 – DevMarwen

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 
+0

在這裏,我得到所有的塊,但我需要的是最後一個。 – DevMarwen

+0

爲什麼?和什麼條件? –

+0

@Marwen試試這個'select owner_id,key,array_agg(id)塊 from t group by 1,2 order by 3 desc limit 1' –

相關問題