Получить строку перед предложением где - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу получить значения

У меня есть таблица с именем slot_machine_history, которая представляет все движения (продано, новое перемещение, уничтожено, приостановлено) данного игрового автомата.

Я хочу получить строку перед каждым проданным движением, обозначенным как «V» и «V». Поскольку я хочу получить компанию, чтобы она была владельцем слота, а новый владелец слота

  slot_machine_code        movement_history       current_company
  612134                    'NEW'                   1
  612134                    'TRANSPORT'             1
  612134                    'TRANSPORT'             1
  612134                    'V'                     10  
  612134                    'TRANSPORT'             10
  612134                    'SUSPENDED'             10
 612134                 'V'                     14

мой sql запрос должен вернуть:

 612134                 'TRANSPORT'             1
 612134                 'V'                     10
 612134                 'SUSPENDED'             10
 612134                 'V'                     14

1 Ответ

0 голосов
/ 07 ноября 2018

Вам нужен какой-то разумный способ упорядочить строки для этого. Надеемся, что на вашем столе есть что-то, что увеличивается, например, дата или счетчик для каждого события движения, которое предпринимает машина:

  movement_event slot_machine_code        movement_history       current_company
  1              612134                    'NEW'                   1
  2              612134                    'TRANSPORT'             1
  3              612134                    'TRANSPORT'             1
  4              612134                    'V'                     10  
  5              612134                    'TRANSPORT'             10
  6              612134                    'SUSPENDED'             10
  7              612134                    'V'                     14

Вы можете сделать запрос, например:

SELECT slot_machine_code, movement_history, current_company FROM
(
  SELECT t.*, LEAD(movement_history) OVER(PARTITION BY slot_machine_code ORDER BY movement_event ASC) as next_Movement_history
  FROM your_table t
) z
WHERE
  z.movement_history = 'V' OR z.next_movement_history = 'V'

Если нет столбца, обозначающего порядок, в котором были записаны записи, вы как бы в правду. Добавить один.

Если ваша текущая таблица просто так возвращает строки в том порядке, в котором они были вставлены, то этого будет достаточно, чтобы добавить строку или подобное, но сделайте это в ближайшее время, потому что порядок, в котором база данных возвращает строки никогда не гарантируется порядок вставки, и внутренняя реорганизация данных изменит порядок строк, возвращаемых неупорядоченным (без предложения ORDER BY) запросом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...