2016-06-14 1 views
1

У меня есть простой PostgreSQL запрос, что делать события запроса на позднюю дату, но я хотел, чтобы удалить эту Distinct колонку (время) из результатаSql DISTINCT столбец удалить из результата

SELECT DISTINCT time, sensor_id, event_type, value from events ORDER BY sensor_id 

+---------------------+---+---+-----+ 
| 2014-02-13 12:42:00 | 2 | 2 | 5 | 
| 2014-02-13 13:19:57 | 2 | 4 | -42 | 
| 2014-02-13 13:32:36 | 2 | 3 | 54 | 
| 2014-02-13 14:48:30 | 2 | 2 | 2 | 
| 2014-02-13 12:54:39 | 3 | 2 | 7 | 
+---------------------+---+---+-----+ 

нужен результат, как этот

+---+---+-----+ 
| 2 | 2 | 5 | 
| 2 | 4 | -42 | 
| 2 | 2 | 2 | 
| 2 | 3 | 54 | 
| 3 | 2 | 7 | 
+---+---+-----+ 

ответ

1

Я думаю, что вы имеете в виду что-то вроде:

SELECT sensor_id, event_type, value 
from (
      SELECT DISTINCT time, sensor_id, event_type, value from events 
     ) A 
ORDER BY sensor_id 
+0

этот код sql делает результаты заказа nt по последней дате. – Swapnil

+0

@Swapnil, это правильно, это не было требованием и не было отсортировано таким образом в исходном запросе. Кроме того, это невозможно, вы не можете сортировать то, чего у вас нет. – HoneyBadger

0

Вы можете использовать функцию агрегата для заказа по максимальному значению времени.

SELECT sensor_id, event_type, value 
FROM events 
GROUP BY sensor_id, event_type, value 
ORDER BY MAX(time) DESC 
+0

мне нужно запросить последние события на 'время' colummn –

+0

@ ZarahDewayne извинения, пожалуйста, проверьте обновленные ан. – Swapnil

+0

@ ZarahDewayne Этот sql гарантирует, что различные значения выбраны без включения времени на выходе. В этом случае встроенные запросы не будут работать, поскольку они не гарантируют, что записи во внешнем запросе находятся в ожидаемом порядке. – Swapnil

0

USE CTE и ранга window функция

with temp as 
    (select time,sensor_id, event_type, value , rank() OVER (PARTITION BY  ensor_id, event_type, value order by 'time') as rnk 
     ) 
     select time,sensor_id, event_type, value from temp where rnk =1 
1

Вы можете использовать PostgreSQL DISTINCT ON (...) особенность:

SELECT DISTINCT ON (time, sensor_id, event_type, value) 
     sensor_id, event_type, value from events 
ORDER BY sensor_id;