2016-08-15 3 views
1

Я ищу альтернативного кода SQLЛучшая производительность для этого алгоритма sql?

Моя таблица содержит 4 колонки: Id, Zip code, timestamp and user value.

Row Пример: 2299898;"40";"2011-03-28 00:45:00+02";1.9

Я хочу, чтобы получить набор результатов в течение одного дня для каждого почтового индекса, где время равно или перед меткой времени. И, очевидно, пользовательские данные для каждой строки.

Мой запрос до сих пор:

SELECT DISTINCT 
    FIRST_VALUE(timestamp) OVER (
     PARTITION BY zipcode, DATE(timestamp) 
     ORDER BY timestamp DESC 
    ) AS timestamp, 
    zipcode, 
    FIRST_VALUE(userdata) OVER (
     PARTITION BY zipcode, DATE(timestamp) 
     ORDER BY timestamp DESC 
    ) AS userdata 
+0

Tag СУБД вы используете. Вопросы производительности почти всегда зависят от продукта. – jarlh

+0

Привет jarlh, Это postgres 9.1, –

+0

Какова проблема с производительностью? Время выполнения занимает больше времени, чем ожидалось? Вы использовали 'EXPLAIN' для создания плана выполнения? –

ответ

1

Вам не нужны оконные функции:

select distinct on (zipcode, timestamp::date) 
    timestamp, 
    zipcode, 
    userdata 
from t 
order by zipcode, timestamp::date desc, timestamp desc 

Проверить distinct on

+0

кажется идеальным. Я должен проверить реальную базу данных (завтра) перед закрытием потока, но первые тесты на моем локальном показывают, что ваш запрос в десять раз эффективнее. Спасибо, очень признателен за ваш ответ. –

+0

Спасибо. он отлично работает –

Смежные вопросы