Mysql 按复杂顺序-按查询子顺序

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

我需要对下面提到的表结构执行汇总计算,因为我需要按“sessionId”排序,按“sequenceId”分组。特定会话可以有一个或多个序列。每个序列从一开始,然后依次向前移动。主键和流动顺序可能不一致

表>>

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