构建时间刻度表以获取多个键的最新值的最佳方法

问题描述 投票:0回答:1

我对时间刻度是全新的,可以在 SQL 中很好地做到这一点,但我不确定是否有更好的方法在时间刻度数据库中做到这一点。

我有下表

| DATE                | MERCHANT_ID | COUNTRY_CODE | PRODUCT_ID | INVENTORY |
|---------------------|-------------|--------------|------------|-----------|
| 2024-03-20 08:00:00 | 1           | US           | 1          | 150       |
| 2024-03-20 08:00:00 | 1           | US           | 2          | 220       |
| 2024-03-20 08:00:00 | 1           | US           | 3          | 380       |
| 2024-03-20 08:00:00 | 1           | US           | 4          | 400       |
| 2024-03-20 09:00:00 | 1           | US           | 1          | 180       |
| 2024-03-20 09:00:00 | 1           | US           | 2          | 200       |
| 2024-03-20 09:00:00 | 1           | US           | 3          | 310       |
| 2024-03-20 09:00:00 | 1           | US           | 4          | 440       |
| 2024-03-20 10:00:00 | 1           | US           | 1          | 120       |
| 2024-03-20 10:00:00 | 1           | US           | 2          | 240       |
| 2024-03-20 10:00:00 | 1           | US           | 3          | 360       |
| 2024-03-20 10:00:00 | 1           | US           | 4          | 410       |
| 2024-03-20 11:00:00 | 1           | US           | 1          | 130       |
| 2024-03-20 11:00:00 | 1           | US           | 2          | 260       |
| 2024-03-20 11:00:00 | 1           | US           | 3          | 390       |
| 2024-03-20 11:00:00 | 1           | US           | 4          | 520       |
| 2024-03-20 08:00:00 | 2           | UK           | 1          | 150       |
| 2024-03-20 08:00:00 | 2           | UK           | 2          | 250       |
| 2024-03-20 08:00:00 | 2           | UK           | 3          | 350       |
| 2024-03-20 08:00:00 | 2           | UK           | 4          | 450       |
| 2024-03-20 09:00:00 | 2           | UK           | 1          | 160       |
| 2024-03-20 09:00:00 | 2           | UK           | 2          | 270       |
| 2024-03-20 09:00:00 | 2           | UK           | 3          | 380       |
| 2024-03-20 09:00:00 | 2           | UK           | 4          | 490       |
| 2024-03-20 10:00:00 | 2           | UK           | 1          | 170       |
| 2024-03-20 10:00:00 | 2           | UK           | 2          | 280       |
| 2024-03-20 10:00:00 | 2           | UK           | 3          | 390       |
| 2024-03-20 10:00:00 | 2           | UK           | 4          | 500       |
| 2024-03-20 11:00:00 | 2           | UK           | 1          | 180       |
| 2024-03-20 11:00:00 | 2           | UK           | 2          | 290       |
| 2024-03-20 11:00:00 | 2           | UK           | 3          | 400       |
| 2024-03-20 11:00:00 | 2           | UK           | 4          | 510       |

我想要做的是为关键 MERCHANT_ID、COUNTRY_CODE、Product_ID 选择最新的库存编号,其中 PRODUCT_ID 是某个列表。 可能的情况是,我们在不确定的时间内没有库存记录,并且该表可能会增长到数百万行的规模。

例如,从上表中,如果我正在查看“MERCHANT_ID=2, COUNTRY_CODE=US, PRODUCT_ID in (1, 2, 3)”,我会想要:

| MERCHANT_ID | COUNTRY_CODE | PRODUCT_ID | INVENTORY |
|-------------|--------------|------------|-----------|
| 2           | US           | 1          | 130       |
| 2           | US           | 2          | 260       |
| 2           | US           | 3          | 390       |

获取这些数据的最有效方法是什么?我目前正在使用空白石板,因此我在日期列上只有一个索引,因此我可以添加索引或创建连续聚合物化视图(如果更好的话)。我最终将为该表创建一个时间序列,但目前我只想获取最新的值。

postgresql timescaledb
1个回答
0
投票

第一次也是最简单的尝试:

添加按时间、MERCHANT_ID、COUNTRY_CODE、PRODUCT_ID组成的组合索引。

如果还不够,您可以构建一个非常精简的超级表,可以是

time, identifier,value

对于您的情况,

inventory
中的值和
id
是其他数据的组合。

如果您想了解更多信息,我在此视频中介绍了多个模型:https://www.youtube.com/watch?v=sUgXZwK_sz0

© www.soinside.com 2019 - 2024. All rights reserved.