小编dar*_*jdr的帖子

Postgresql OVER和GROUP

我有分组问题

我有一张桌子(其中有很多东西,但不相关)看起来像:

id user
0 1
1 1
2 1
3 2
4 2
5 2
6 1
7 1
Run Code Online (Sandbox Code Playgroud)

我正在尝试获得以下值:

user start end
1 0 2
2 3 5
1 6 7
Run Code Online (Sandbox Code Playgroud)

基本上,我需要用户的第一次和最后一次出现,而不是搞乱订单.我知道我需要使用OVER(PARTITION BY ...),但我从未使用它,也不确定如何构建此查询.如果我"按用户分区",它会忽略顺序.如果我"按id,用户分区"它再次返回错误.

我试过的例子(甚至没有尝试得到我需要的东西,但是一个中点,告诉我一旦我弄清楚"结束"部分怎么做):

SELECT user, count(user) over (partition by user):
user count
1 5
1 5
1 5
2 3
2 3
2 3
1 5
1 5

SELECT user, count(user) over (partition by id, user):
user count
1 1
1 1
1 1
2 1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql window-functions gaps-and-islands

1
推荐指数
2
解决办法
7063
查看次数