我有一個包含多個產品的表。對於每種產品,我都在收集價格的歷史。因此,我有四列:從數據庫中選擇多個最大時間戳
- log_entry
- 的product_id
- PRODUCT_PRICE
- 時間戳
到現在爲止,我在同一時間更新了所有的價格。這導致了一個簡單的查詢:在子查詢中,我過濾了最大時間戳,然後獲得所有價格和產品。
今天我改變了我的更新政策:我現在更新產品的價格異步。這意味着,當我使用我的舊查詢時,我只能得到具有最大時間戳的產品價格對。
如何在一個查詢中獲得每個產品的最新價格/最大時間戳?
我有一個包含多個產品的表。對於每種產品,我都在收集價格的歷史。因此,我有四列:從數據庫中選擇多個最大時間戳
到現在爲止,我在同一時間更新了所有的價格。這導致了一個簡單的查詢:在子查詢中,我過濾了最大時間戳,然後獲得所有價格和產品。
今天我改變了我的更新政策:我現在更新產品的價格異步。這意味着,當我使用我的舊查詢時,我只能得到具有最大時間戳的產品價格對。
如何在一個查詢中獲得每個產品的最新價格/最大時間戳?
您可以對按時間戳排序的結果使用group by。不知道它是否有效:
select * from (
select * from products
order by timestamp desc
) as products_temp
group by product_id;
如果時間戳字段的數據類型爲timestamp
,那麼在記錄的每個字段更新時,該時間戳字段可以自動更新。爲了實現這一點,您的ts字段應該像下表中的僞示例那樣定義。
CREATE TABLE t1 (
product ...
price ...
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
而當您只更新產品或價格等其他字段時,會使用當前時間戳更新ts字段。然後您的舊查詢應該也會返回最新的更新記錄。