gpt4 book ai didi

sql - 按重复属性分组

转载 作者:行者123 更新时间:2023-11-29 12:29:31 25 4
gpt4 key购买 nike

基本上我有一个表 messages,其中包含 user_id 字段,用于标识创建消息的用户。

当我显示两个用户之间的对话(消息集)时,我希望能够按 user_id 对消息进行分组,但采用一种棘手的方式:

假设有一些消息(按 created_at desc 排序):

  id: 1, user_id: 1
id: 2, user_id: 1
id: 3, user_id: 2
id: 4, user_id: 2
id: 5, user_id: 1

我想按以下顺序获取 3 个消息组:[1,2], [3,4], [5]

它应该按 *user_id* 分组,直到它看到一个不同的,然后按那个分组。

我正在使用 PostgreSQL,并且很乐意使用特定于它的东西,无论什么都能提供最佳性能。

最佳答案

尝试这样的事情:

SELECT user_id, array_agg(id)
FROM (
SELECT id,
user_id,
row_number() OVER (ORDER BY created_at)-
row_number() OVER (PARTITION BY user_id ORDER BY created_at) conv_id
FROM table1 ) t
GROUP BY user_id, conv_id;

表达式:

row_number() OVER (ORDER BY created_at)-
row_number() OVER (PARTITION BY user_id ORDER BY created_at) conv_id

会给每个消息组一个特殊的id你们所有不同的消息组)

我的 SQLFiddle举例说明。

详情:row_number() , OVER (PARTITION BY ... ORDER BY ...)

关于sql - 按重复属性分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14010348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com