Запрос последовательностей строк в SQL

Предположим, я сохраняю событий , связанных с пользователями , в таблице следующим образом (с dt вместо метки времени события):

| dt | user | event |
|  1 |  1   |   A   |
|  2 |  1   |   D   |
|  3 |  1   |   B   |
|  4 |  1   |   C   |
|  5 |  1   |   B   |
|  6 |  2   |   B   |
|  7 |  2   |   B   |
|  8 |  2   |   A   |
|  9 |  2   |   A   |
| 10 |  2   |   C   |

Таким образом, мы могли бы сказать:

  • пользователь 1 имеет последовательность событий ADBCB
  • пользователь 2 имеет последовательность событий BBAAC

Типы вопросов, на которые я хотел бы ответить об этих пользователях, очень легко ответить выражаются как обычные выражения для последовательностей событий, например, "какие пользователи имеют последовательность событий, соответствующую A. * B?" или "у каких пользователей последовательность событий соответствует A [^ C] * B [^ C] * D?" и т.п.

Какой хороший метод или оператор SQL я мог бы использовать для ответа на аналогичные запросы по этой структуре таблицы?

Есть ли способ эффективно / динамически генерировать таблицу пользователя -to- event-sequence , который затем можно было бы запросить с помощью регулярного выражения?

В настоящее время я рассматриваю возможность использования Postgres, но мне любопытно узнать, есть ли в более крупных СУБД, таких как SQLServer или Oracle, специальные операторы для этого. .

8
задан nicolaskruchten 24 April 2011 в 14:42
поделиться