У меня есть ряд записей, которые могут быть группируются по group_id
Как установить позицию записи относительно группы в SQL?
Пример записи:
╭───╥──────────┬───────────────────╮
│id ║ group_id │ position_in_group │
╞═══╬══════════╪═══════════════════╡
│ 1 ║ 2 │ null │
│ 2 ║ 1 │ null │
│ 3 ║ 1 │ null │
│ 4 ║ 1 │ null │
│ 5 ║ 2 │ null │
│ 6 ║ 2 │ null │
│ 7 ║ 3 │ null │
│ 8 ║ 3 │ null │
│ 9 ║ 3 │ null │
└───╨──────────┴───────────────────┘
Я хочу, чтобы установить position_in_group
для каждой записи. Это позиция записи внутри группы, если я GROUP BY group_id
.
Например: В группе с идентификатором 1, запись с идентификатором = 2 является первым, так что его position_in_group
будет 1.
Финальный стол будет:
╭───╥──────────┬───────────────────╮
│id ║ group_id │ position_in_group │
╞═══╬══════════╪═══════════════════╡
│ 1 ║ 2 │ 1 │
│ 2 ║ 1 │ 1 │
│ 3 ║ 1 │ 2 │
│ 4 ║ 1 │ 3 │
│ 5 ║ 2 │ 2 │
│ 6 ║ 2 │ 3 │
│ 7 ║ 3 │ 1 │
│ 8 ║ 3 │ 2 │
│ 9 ║ 3 │ 3 │
└───╨──────────┴───────────────────┘
Is Есть ли способ сделать это в SQL-запросе?
Это будет сделано с использованием 'row_number() over (partition by group_id order by id)' в oracle и sqlserver. Проверьте здесь параметры эквивалента mysql: http://stackoverflow.com/q/1895110/6205293 – mo2
Да, запрос с переменными (@) ... кто-то ударил. – Drew