我有一张桌子,上面有多种产品。对于每种产品,我都在收集价格历史。因此,我有四列:
- 日志条目
- product_id
- 产品价格
- 时间戳
到目前为止,我同时更新了所有价格。这导致了一个简单的查询:在一个子查询中,我过滤了最大时间戳,然后得到了所有的价格和产品。
今天我改变了我的更新策略:我现在异步更新产品的价格。这意味着,当我使用旧查询时,我只会得到具有最大时间戳的产品价格对。
如何在一次查询中获取每种产品的最新价格/最大时间戳?
如果时间戳字段是timestamp
数据类型,那么在记录的每次字段更新时,该时间戳字段都会自动更新。为此,您的 ts 字段应该在下表伪示例中定义。
CREATE TABLE t1 (
product ...
price ...
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
当您仅更新产品或价格等其他字段时,ts 字段将使用当前时间戳进行更新。那么您的旧查询也应该返回最新的更新记录。
您可以对按时间戳排序的结果使用 group by。不确定它是否有效:
select * from (
select * from products
order by timestamp desc
) as products_temp
group by product_id;