我在postgresql中有一个表
type id n occurred_at
A 159 4 2013/12/20 18:05
A 159 5 2013/12/27 18:05
A 159 6 2014/1/20 18:05
A 159 8 2014/3/22 12:34
B 180 5 2014/3/29 12:34
B 180 6 2014/4/22 12:34
C 207 4 2014/3/13 03:24
C 207 8 2014/3/20 03:24
C 207 6 2014/4/13 03:24
D 157 4 2013/12/20 18:07
D 157 5 2013/12/27 18:07
D 157 6 2014/1/20 18:07
D 157 8 2013/1/20 17:41
D 157 8 2013/12/27 17:41
D 157 8 2014/1/20 17:41
我希望不同的n
在一行中具有相同的type
和id
,并按occurred_at
排序(n
仅适用于6或8) 。结果如下,我试图使用type, id
组来获得这个,但似乎很难。
有没有人有更好的想法呢?
A 159 6 8
B 180 6
C 207 8 6
D 157 8 8 6 8
答案 0 :(得分:1)
如果您想要以空格分隔的n值列表,可以使用string_agg
汇总所有值:
select type, id, string_agg(n::text, ' ' order by occurred_at) as n_values
from the_table
group by type, id;
答案 1 :(得分:0)
我不能100%确定您想要的输出效果,但如果您正在寻找一个独特的" n"基于类型和id的每一行的值,我认为row_number()
分析函数会这样做。
select
type, id,
row_number() over (partition by type, id order by occurred_at) as n,
occurred_at
from my_table