Как изменить положение строки с определенным значением в результате запроса - PullRequest
0 голосов
/ 01 мая 2018

Вот что я пытаюсь сделать.

У меня есть следующие образцы данных.

trxn_id event_id  timestamp
1         4        111
1        16        121
1         1        110

Теперь я бы хотел, чтобы событие 16 отображалось между 4 и 1 в результатах с order by timestamp desc. Означает, что результат всегда должен быть упорядочен по времени в нисходящем, за исключением строки event_id = 16, расположенной чуть ниже строки event_id = 4, независимо от того, какое время это .

Я думал сначала выбрать результат event_id = 4, а затем объединить его с результатом выбора оставшихся идентификаторов event_id, но они не поддерживают порядок, в котором было применено объединение. Что можно сделать? спасибо.

Редактировать: я выбираю на основе определенного trxn_id. Может быть несколько event_id=16 в одном trxn. Все должно появиться чуть ниже event_id=4.

Ответы [ 3 ]

0 голосов
/ 01 мая 2018

Я думаю, вы могли бы заранее определить иерархию для event_id, сначала отсортировать ее, а затем отсортировать по TIMESTAMP DESC.

ORDER BY CASE event_id
        WHEN 4
            THEN 1
        WHEN 16
            THEN 2
        WHEN 1
            THEN 3
        END
    ,TIMESTAMP DESC
0 голосов
/ 01 мая 2018

В Postgres я бы рекомендовал использовать массивы:

order by array_position(array[1, 16, 4], event_id), timestamp desc
0 голосов
/ 01 мая 2018

Обычно, если у вас есть метка времени 16, равная метке времени 4, вы можете упорядочить ее по новой метке времени и идентификатору события. Может быть более короткое решение с использованием оконных функций, но я не уверен, работает ли он с postgresql

select t1.txn_id, t1.event_id, t1.timestamp, case when t2.min_time is not null then t2.min_time else t1.timestamp end as timestamp2
from table as T1
left join 
(
  select trxn_id, min(timestamp) as min_time
  from table
  group by trxn_id
) as T2
on T1.trxn_id = T2.trxn_id
  and T1.event_id = 16
order by t1.txn_id, timestamp2 desc, t1.event_id, t1.timestamp desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...