2012-05-20 80 views
0

我有一個包含多個產品的表。對於每種產品,我都在收集價格的歷史。因此,我有四列:從數據庫中選擇多個最大時間戳

  • log_entry
  • 的product_id
  • PRODUCT_PRICE
  • 時間戳

到現在爲止,我在同一時間更新了所有的價格。這導致了一個簡單的查詢:在子查詢中,我過濾了最大時間戳,然後獲得所有價格和產品。

今天我改變了我的更新政策:我現在更新產品的價格異步。這意味着,當我使用我的舊查詢時,我只能得到具有最大時間戳的產品價格對。

如何在一個查詢中獲得每個產品的最新價格/最大時間戳?

回答

0

您可以對按時間戳排序的結果使用group by。不知道它是否有效:

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

如果時間戳字段的數據類型爲timestamp,那麼在記錄的每個字段更新時,該時間戳字段可以自動更新。爲了實現這一點,您的ts字段應該像下表中的僞示例那樣定義。

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

而當您只更新產品或價格等其他字段時,會使用當前時間戳更新ts字段。然後您的舊查詢應該也會返回最新的更新記錄。

相關問題