sql: выберите первую строку при любом изменении заказа - PullRequest
0 голосов
/ 19 октября 2018

Здравствуйте, postgres. Я хочу выполнить следующее задание

У меня есть запрос:

select to_timestamp(clock), value
from history_str
where itemid =696857
order by clock desc

, который возвращает:

enter image description here

Я хотел бы получить первое время порядка списка по часам.

результат, который я ожидаю, - это точка от 1 до 8 с отметкой времени и значением.

Я пытался использовать функцию over, но не смог правильно ее завершить.

Любая помощь?Спасибо

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы хотите использовать lag() для этого, потому что value может вернуться к предыдущему значению:

select to_timestamp(clock), value
from (select t.*,
             lag(value) over (partition by itemid order by to_timestamp(clock)) as prev_value
      from t
      where itemid = 696857
     ) t
where prev_value is null or prev_value <> value
order by clock desc;
0 голосов
/ 19 октября 2018

Один подход использует ROW_NUMBER:

SELECT ts, value
FROM
(
    SELECT TO_TIMESTAMP(clock) AS ts, value,
        ROW_NUMBER() OVER (PARTITION BY value ORDER BY TO_TIMESTAMP(clock) DESC) rn
    FROM history_str
) t
WHERE rn = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...