MySQL Advanced Ordering, объединяющий два запроса - PullRequest
1 голос
/ 31 октября 2019

Я получаю следующие данные, используя два запроса, которые я затем использую для объединения UNION ALL:

InitialData

  • Первая часть: все IN события сортируются с использованием SideA, затем EventTime
  • Вторая часть: все OUT события сортируются одинаково

Однако я бы хотел, чтобы финалрезультат будет следующим:

  • Вставьте события OUT в соответствующий EventTime, где out.SideB=in.SideA
  • Вы заметите, что для каждого события OUT есть соответствующее событие IN, ноиногда это не тот случай (случай выделен оранжевым цветом).
  • Кроме того, время может не совпадать на 100%, поэтому его нельзя использовать для сопоставления.

Таким образом, конечный результат должен быть таким:

endResults

Пожалуйста, сообщите, как поступить.

PS: Пожалуйста, найдите данные, использованные в моем примере, в этом GoogleSheet

1 Ответ

3 голосов
/ 31 октября 2019

Я имею в виду предложение order by вроде:

order by 

    -- if event type is 1, order by SideA, else order by SideB        
    case when EventType = 'IN' then SideA else SideB end,

    -- then event time
    EventTime,

    -- `Out` goes before `IN` if there are several events at the same time
    EventType desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...