0

I have a table with multiple products. For each product, I am collecting an history of prices. Thus I have four columns:

  • log_entry
  • product_id
  • product_price
  • timestamp

Until now, I updated all prices at the same time. This lead to an easy query: In a subquery, I filtered the max timestamp and then got all prices and products.

Today I changed my update policy: I now update prices for products asynchronously. This means, when I use my old query, I only get a product-price-pair with the maximum timestamp.

How do I get the most current price/the maximum timestamp for every product in one query?

4

2 に答える 2

1

タイムスタンプフィールドがtimestampデータ型の場合、レコードのフィールドが更新されるたびに、このタイムスタンプフィールドは自動的に更新されます。そのためには、次の表の疑似例のようにtsフィールドを定義する必要があります。

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

また、商品や価格などの他のフィールドのみを更新すると、tsフィールドは現在のタイムスタンプで更新されます。次に、古いクエリは最新の更新されたレコードも返すはずです。

于 2012-05-20T12:04:18.897 に答える
0

タイムスタンプで並べ替えられた結果に対してgroupbyを使用できます。それが機能するかどうかわからない:

select * from (
  select * from products 
    order by timestamp desc
) as products_temp
group by product_id;
于 2012-05-20T12:04:25.417 に答える