【问题标题】:Selecting multiple max timestamps from database从数据库中选择多个最大时间戳
【发布时间】:2012-05-20 11:40:05
【问题描述】:

我有一张桌子,里面有多种产品。对于每种产品,我都在收集价格历史。因此我有四列:

  • log_entry
  • product_id
  • product_price
  • 时间戳

到目前为止,我同时更新了所有价格。这导致了一个简单的查询:在一个子查询中,我过滤了最大时间戳,然后得到了所有价格和产品。

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

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

【问题讨论】:

    标签: mysql timestamp


    【解决方案1】:

    如果时间戳字段是timestamp数据类型,那么在记录的每次字段更新时,该时间戳字段都会自动更新。为此,您的 ts 字段应该在下表伪示例中定义。

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-14
        • 2015-04-01
        • 2016-06-10
        • 1970-01-01
        • 2021-08-02
        • 2014-05-09
        • 1970-01-01
        • 2017-06-15
        相关资源
        最近更新 更多