我希望通过每个用户的消息从某些聊天中获取统计信息。但我想分组相邻的消息。如果用户逐个写入3条消息,则将其视为一条消息。 例如,我有这些记录:
id user message
1 1 text1
2 1 text2
3 2 text3
4 3 text4
5 1 text5
6 2 text6
7 2 text7
8 3 text8
9 1 text9
10 1 text10
11 1 text11
12 3 text12
我需要得到这个结果:
user
1
2
3
1
2
3
1
3
我希望通过折叠邮件获取子查询结果,然后使用“group by”运行查询以获取所有统计信息。
我试图运行
SELECT * FROM messages GROUP BY user ORDER BY id
但它由一个用户对所有消息进行分组:
id user
1 1
3 2
4 3
答案 0 :(得分:1)
E.g。 (虽然在实践中我很想在应用程序代码中解决这类问题):
SELECT MAX(user) user
, i
FROM
( SELECT user
, CASE WHEN @prev = user THEN @i:=@i ELSE @i:=@i+1 END i
, @prev:=user
FROM my_table
, (SELECT @prev:=null, @i:=0) vars
ORDER
BY id
) x
GROUP
BY i;
...或
SELECT DISTINCT user, i
FROM
( SELECT user
, CASE WHEN @prev = user THEN @i:=@i ELSE @i:=@i+1 END i
, @prev:=user
FROM my_table
, (SELECT @prev:=null, @i:=0) vars
ORDER
BY id
) x
ORDER
BY i;