【发布时间】:2017-09-22 12:43:25
【问题描述】:
我遇到了分组问题
我有一张表格(里面有很多东西,但不相关),看起来像:
id user
0 1
1 1
2 1
3 2
4 2
5 2
6 1
7 1
我正在尝试获取以下值:
user start end
1 0 2
2 3 5
1 6 7
基本上,我需要用户的第一次和最后一次出现,而不是弄乱顺序。 我知道我需要使用 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
2 1
2 1
1 1
1 1
【问题讨论】:
-
SELECT user, min(id) over (partition by user), max(id) over (partition by user)?..
标签: sql postgresql window-functions gaps-and-islands