Postgres - извлечение последней записи из исторических данных для каждого объекта, который соответствует определенным критериям - PullRequest
0 голосов
/ 22 июня 2019

У меня есть таблица asset_history, которая выглядит следующим образом ...

asset_id   |          timestamp        |    sites           |
    1            2019-02-02 09:10:01         null
    1            2019-02-02 09:10:00     [{"id":2},{"id":3}]
    2            2019-02-02 10:00:01     [{"id":2},{"id":3}]
    2            2019-02-02 10:00:00          null
    3            2019-02-02 10:00:02          null
    3            2019-02-02 10:00:01          null
    3            2019-02-02 10:00:00      [{"id":3}]
    4            2019-02-02 11:00:00      [{"id":2}]

Я хочу написать SQL-запрос, который даст мне самую последнюю запись из этой таблицы для каждого ресурса, только если в последней записи этого ресурса указано значение «sites». Вывод из приведенной выше таблицы, которую я ищу, будет

asset_id   |          timestamp        |    sites           |
    1            2019-02-02 09:10:01         null
    3            2019-02-02 10:00:02         null

Я также хотел бы знать общее количество активов, в которых последняя запись в каждом активе имеет сайты с нулевым значением, а разница во времени между текущим временем и отметкой времени на последней записи, где сайты имеют нулевое значение, превышает 1 час. Таким образом, предполагая, что текущее время 2019-02-02 10:30:00, набор результатов будет выглядеть следующим образом ... (Поскольку только asset_id 1 имеет разницу во времени больше 1 часа по сравнению с текущим временем)

|  count   |
     1
...