2016-05-18 3 views
1

Я хочу заказать запрос Postgres в зависимости от условий в таблицеPostgres Сортировка несколько столбцов с условием

id sensor_id   alarmTime   clearedTime 
415068  3734 2016-04-20 12:25:32 2016-04-27 21:05:44 
415070  3734 2016-04-21 12:25:32     null 
415071  3734 2016-03-22 12:25:32 2016-04-29 21:15:44   
415072  3734 2016-04-23 12:25:32     null   
415073  3734 2016-04-20 12:25:32 2016-04-22 22:05:45   
415074  3734 2016-02-26 12:25:32 2016-04-27 23:15:24 

Из приведенных выше таблиц, я хочу сначала упорядочить по нулям первых и время сигнализации с остальными строками заказывается только по очищенному времени. чтобы получить некоторые вещи, как этот

id sensor_id   alarmTime   clearedTime 
415070  3734 2016-04-21 12:25:32     null 
415072  3734 2016-04-23 12:25:32     null 
415068  3734 2016-04-20 12:25:32 2016-04-27 21:05:44 
415073  3734 2016-04-20 12:25:32 2016-04-22 22:05:45   
415071  3734 2016-03-22 12:25:32 2016-04-29 21:15:44   
415074  3734 2016-02-26 12:25:32 2016-04-27 23:15:24 

Я пытался что-то вроде этого

select * from table 
ORDER BY 
case alarm.clearedTime is NOT NULL 
when TRUE THEN alarmTime 
else clearedTime 
end DESC NULLS FIRST; 
+0

В чем проблема? Ваше условие заказа не ясно, пожалуйста, объясните с более подробной информацией. –

+0

Ваш образец выглядит неправильно '415072' shoul будет первым, чем' 415070' –

ответ

1

TRY

ORDER BY COALESCE(clearedTime, alarmTime) 

или что-то вроде этого.

ORDER BY CASE 
      WHEN clearedTime IS NULL THEN NULL 
             ELSE 1 
     END NULLS FIRST, 
     alarm.alarmTime DESC, 
     alarm.clearedTime DESC -- optional to solve tie between 415068 and 415073  
+0

Второе предложение отлично поработало, спасибо! –

+0

хорошо не был уверен, в чем была логика. Рад это решить. Помните о повышении. –

0

Как об этом?

order by alarm.clearedTime nulls first, alarm.alarmTime 
Смежные вопросы