如何从时间序列 table 中获取最新值?

How to get the latest values day wise from a timeseries table?

我想获取每个 SIZE_TYPE 天的最新值,按 TIMESTAMP 排序。因此,对于给定的一天,每个 SIZE_TYPE 中只有 1 个值必须存在,这是当天的最新值。

如何获得所需的输出?我在这里使用 PostgreSQL。

输入

|TIMESTAMP                               |SIZE_TYPE|SIZE|
|----------------------------------------|---------|----|
|1595833641356 [Mon Jul 27 2020 07:07:21]|0        |541 |
|1595833641356 [Mon Jul 27 2020 07:07:21]|1        |743 |
|1595833641356 [Mon Jul 27 2020 07:07:21]|2        |912 |
|1595876841356 [Mon Jul 27 2020 19:07:21]|1        |714 |
|1595876841356 [Mon Jul 27 2020 19:07:21]|2        |987 |
|1595963241356 [Tue Jul 28 2020 19:07:21]|0        |498 |
|1595920041356 [Tue Jul 28 2020 07:07:21]|2        |974 |
|1595920041356 [Tue Jul 28 2020 07:07:21]|0        |512 |

*Note: the TIMESTAMP values are in UNIX time. I have given
the date-time string for reference*

输出

|TIMESTAMP                               |SIZE_TYPE|SIZE|
|----------------------------------------|---------|----|
|1595833641356 [Mon Jul 27 2020 07:07:21]|0        |541 |
|1595876841356 [Mon Jul 27 2020 19:07:21]|1        |714 |
|1595876841356 [Mon Jul 27 2020 19:07:21]|2        |987 |
|1595920041356 [Tue Jul 28 2020 07:07:21]|2        |974 |
|1595963241356 [Tue Jul 28 2020 19:07:21]|0        |498 |

*Note: the TIMESTAMP values are in UNIX time. I have given
the date-time string for reference*

说明

7 月 27 日,

的最新值

7 月 28 日,

的最新值

您可以使用 distinct on:

select distinct on (floor(timestamp / (24 * 60 * 60 * 1000)), size_type) t.*
from input
order by floor(timestamp / (24 * 60 * 60 * 1000)), size_type,
          timestamp desc;

算法只是从时间戳中提取日期。

Here 是一个 db<>fiddle.