Mysql 按复杂顺序-按查询子顺序
我需要对下面提到的表结构执行汇总计算,因为我需要按“sessionId”排序,按“sequenceId”分组。特定会话可以有一个或多个序列。每个序列从一开始,然后依次向前移动。主键和流动顺序可能不一致 表>>Mysql 按复杂顺序-按查询子顺序,mysql,sql,Mysql,Sql,我需要对下面提到的表结构执行汇总计算,因为我需要按“sessionId”排序,按“sequenceId”分组。特定会话可以有一个或多个序列。每个序列从一开始,然后依次向前移动。主键和流动顺序可能不一致 表>> pk_id session-id sequence some_other columns 1 AAAAAAAA 1 blah-blah-blah 2 AAAAAAAA 2 blah-blah-b
pk_id session-id sequence some_other columns
1 AAAAAAAA 1 blah-blah-blah
2 AAAAAAAA 2 blah-blah-blah
3 AAAAAAAA 3 blah-blah-blah
4 AAAAAAAA 2 blah-blah-blah
5 AAAAAAAA 1 blah-blah-blah
6 AAAAAAAA 3 blah-blah-blah
7 AAAAAAAA 3 blah-blah-blah
8 AAAAAAAA 2 blah-blah-blah
9 AAAAAAAA 1 blah-blah-blah
我需要点餐
pk_id session-id sequence some_other columns
1 AAAAAAAA 1 blah-blah-blah
2 AAAAAAAA 2 blah-blah-blah
3 AAAAAAAA 3 blah-blah-blah
5 AAAAAAAA 1 blah-blah-blah
4 AAAAAAAA 2 blah-blah-blah
6 AAAAAAAA 3 blah-blah-blah
9 AAAAAAAA 1 blah-blah-blah
8 AAAAAAAA 2 blah-blah-blah
7 AAAAAAAA 3 blah-blah-blah
任何帮助都将不胜感激 假设您想将第一个
序列=1
与第一个序列=2
和第一个序列=3
组合在一起,同样地,第二个1
与第二个2
和第二个3
组合在一起(使用pk\u id
作为顺序),您可以使用变量赋值对序列值进行编号,然后使用生成的数字进行排序
这就是我的意思:
SELECT
pk_id,
session_id,
sequence,
some_other_column
FROM (
SELECT
@row := (session_id = @sid AND sequence = @seq) * @row + 1 AS row,
pk_id,
@sid := session_id AS session_id,
@seq := sequence AS sequence,
some_other_column
FROM
atable,
(SELECT @row := 0, @sid := '', @seq := 0) AS s
ORDER BY
session_id,
sequence,
pk_id
) AS s
ORDER BY
session_id,
row,
sequence
;
此查询可以进行测试。了解确切的列很重要,因为它会影响groupby。这更像是一个排序依据问题;你想以什么方式“组合”任何东西?谢谢鲍勃·杜尔。很抱歉,这是一个按问题排序的基本问题,我们是按会话id对记录进行分组处理的。我应该说是按顺序进行的。是什么因素决定了每3个分组?例如,你如何知道PK_ID 1,2,3在同一组中,而不是PK_ID 5,2,3和1,4,6,那么是什么让你知道一组会话ID在一个新的序列中--PK ID更低?使用时间戳字段会有多容易呢。@Hogan:更自然,是的。太神奇了。。非常感谢安德烈M