2013-03-10 2 views
1

Мне нужно выполнить суммарное вычисление для приведенной ниже структуры таблицы, для которой мне нужно заказать «sessionId» и подгруппу «sequenceId». Частный сеанс может иметь одну или несколько последовательностей. каждая последовательность начинается с одной и перемещается вперед последовательно. первичные ключи и скручивание потока могут быть не в тандеме.Сложный порядок By - Suborder by Query

стол >>

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

Важно знать точные столбцы, поскольку это влияет на группу. –

+0

Это больше похоже на вопрос 'ORDER BY'; каким образом вы хотите «сгруппировать» что-нибудь? – BellevueBob

+0

Спасибо bob duell. Я извиняюсь за свой порядок, потому что мы обрабатываем группу записей по идентификатору session. я должен был заявить порядок .. – kadalamittai

ответ

3

Предполагая, что вы хотите, чтобы сгруппировать вместе первый sequence=1 с первым sequence=2 и первым sequence=3, а так же второй 1 со вторым 2 и вторым 3 и так далее (с использованием pk_id в порядке), вы можете использовать переменное назначение на число sequence значений, затем используйте полученные числа для сортировки.

Это то, что я имею в виду:

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 
; 

Этот запрос может быть проверен at SQL Fiddle.

+0

Насколько проще это будет с полем метки времени. – Hogan

+0

@ Хоган: Гораздо более естественно, да. –

+0

потрясающий .. Большое спасибо Andriy M – kadalamittai