Mysql 从数据库中选择多个最大时间戳

Mysql 从数据库中选择多个最大时间戳,mysql,timestamp,Mysql,Timestamp,我有一张有多种产品的桌子。对于每种产品,我都在收集价格历史记录。因此,我有四个专栏: 日志记录 产品标识 产品价格 时间戳 直到现在,我在同一时间更新了所有价格。这导致了一个简单的查询:在子查询中,我过滤了最大时间戳,然后得到了所有的价格和产品 今天我改变了我的更新策略:我现在异步更新产品的价格。这意味着,当我使用我的旧查询时,我只得到具有最大时间戳的产品价格对 如何在一次查询中获得每个产品的最新价格/最大时间戳?如果时间戳字段为时间戳数据类型,则在记录的每次字段更新时,此时间戳字段可以自动

我有一张有多种产品的桌子。对于每种产品,我都在收集价格历史记录。因此,我有四个专栏:

  • 日志记录
  • 产品标识
  • 产品价格
  • 时间戳
直到现在,我在同一时间更新了所有价格。这导致了一个简单的查询:在子查询中,我过滤了最大时间戳,然后得到了所有的价格和产品

今天我改变了我的更新策略:我现在异步更新产品的价格。这意味着,当我使用我的旧查询时,我只得到具有最大时间戳的产品价格对


如何在一次查询中获得每个产品的最新价格/最大时间戳?

如果时间戳字段为
时间戳
数据类型,则在记录的每次字段更新时,此时间戳字段可以自动更新。为了实现这一点,您的ts字段应该像下表中的示例那样定义

CREATE TABLE t1 (
  product ...
  price ...
  ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

当您只更新产品或价格等其他字段时,ts字段将使用当前时间戳进行更新。那么您的旧查询也应该返回最新更新的记录

您可以对按时间戳排序的结果使用GROUPBY。不确定它是否有效:

select * from (
  select * from products 
    order by timestamp desc
) as products_temp
group by product_id;