我对时间刻度是全新的,可以在 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 |
获取这些数据的最有效方法是什么?我目前正在使用空白石板,因此我在日期列上只有一个索引,因此我可以添加索引或创建连续聚合物化视图(如果更好的话)。我最终将为该表创建一个时间序列,但目前我只想获取最新的值。
第一次也是最简单的尝试:
添加按时间、MERCHANT_ID、COUNTRY_CODE、PRODUCT_ID组成的组合索引。
如果还不够,您可以构建一个非常精简的超级表,可以是
time, identifier,value
对于您的情况,
inventory
中的值和id
是其他数据的组合。
如果您想了解更多信息,我在此视频中介绍了多个模型:https://www.youtube.com/watch?v=sUgXZwK_sz0