Получить значение следующей строки на основе столбца без использования переменной - PullRequest
0 голосов
/ 26 июня 2019

У меня есть база данных, которая отслеживает действия пользователей. Что я хочу сделать, это создать новый столбец (follow_up), который заполняется на основе следующего действия, которое пользователь выполняет во время сеанса, то есть следующего event_id в сеансе. К сожалению, у меня нет возможности использовать или создавать переменные, что, очевидно, усложняет задачу, поскольку я не могу создать переменную с номером строки.

Мои данные выглядят так:

Session ID | Event_ID | Action  
1          | 1        | Action A  
1          | 2        | Action B  
2          | 3        | Action A  
1          | 4        | Action C  
2          | 5        | Action C  
2          | 6        | Action A  
3          | 7        | Action B  
1          | 8        | Action A  
2          | 9        | Action C  
3          | 10       | Action C

Я хочу, чтобы мой окончательный набор данных выглядел так:

Session_ID | Event_ID | Action   | Follow_Up  
1          | 1        | Action A | Action B  
1          | 2        | Action B | Action C  
2          | 3        | Action A | Action C  
1          | 4        | Action C | Action A  
2          | 5        | Action C | Action A  
2          | 6        | Action A | Action C  
3          | 7        | Action B | Action C  
1          | 8        | Action A | Null  
2          | 9        | Action C | Null  
3          | 10       | Action C | Null

этот код для извлечения этих данных довольно прост. Добавление в колонку follow_up оказалось трудным

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Столбец Follow_up заполняется на основе следующего действия, которое пользователь выполняет во время сеанса, то есть следующего события в сеансе, используя подзапрос

select 
  Session_ID,
  Event_ID ,
  Action,
  (select Action from test t1 
   where t1.Event_ID>t.Event_ID and t1.Session_ID=t.Session_ID  
   limit 1) Follow_up
from test t;

DEMO

0 голосов
/ 26 июня 2019

Предполагая, что Event_Id уникален и увеличивается, вы можете получить столбец Follow_Up, например:

select 
  t.*,
  (
    select Action from tablename
    where Event_Id = (
      select min(Event_Id) from tablename
      where Session_id = t.Session_id and Event_id > t.Event_id
    )  
  ) Follow_Up
from tablename t

См. Демоверсию .
Результаты:

| Session_ID | Event_ID | Action   | Follow_Up |
| ---------- | -------- | -------- | --------- |
| 1          | 1        | Action A | Action B  |
| 1          | 2        | Action B | Action C  |
| 2          | 3        | Action A | Action C  |
| 1          | 4        | Action C | Action A  |
| 2          | 5        | Action C | Action A  |
| 2          | 6        | Action A | Action C  |
| 3          | 7        | Action B | Action C  |
| 1          | 8        | Action A |           |
| 2          | 9        | Action C |           |
| 3          | 10       | Action C |           |
...