這是觸發對,我還要談談DATE_SUB和日期間隔
使用觸發器將讓你保持目前的價格在價格表,並保留歷史價格在一個單獨的表。
例如,考慮創建一個名爲price_table_old
price_table_old:
price_id int
item_id int
price_amount float
change_date date
在price_table新表,創建一個 '更新' 觸發...
insert into price_table_old (`item_id`, `price_amount` , `change_date `)
VALUES (OLD.`item_id` , OLD.`price_amount` , NOW())
爲了幫助您與觸發語法,我複製我用於職員表下面的觸發器
當有人更改價格時,price_table_old表會自動更新。
從這裏可以得出當前價格和以前價格的比較情況。
你可以運行像查詢....
SELECT
price_table.item_id ,
price_table.price_amount ,
(price_table.price_amount - price_table_old.price_amount) AS pricediff ,
price_table_old.change_date
FROM
price_table
LEFT JOIN
price_table_old ON price_table_old.item_id = price_table.item_id
ORDER BY price_table.item_id , price_table_old.change_date DESC
還是堅持在那裏哪裏開發區上特定項目和/或日期範圍和/或限制,以獲得最後的(比方說)3價格變化。
例如,爲了獲得對所有項目過去的3天價格變化的列表,你可以使用如下語句
SELECT
price_table.item_id ,
price_table.price_amount ,
(price_table.price_amount - price_table_old.price_amount) AS pricediff ,
price_table_old.change_date
FROM
price_table
LEFT JOIN
price_table_old ON price_table_old.item_id = price_table.item_id
WHERE
price_table_old.change_date > (DATE_SUB(NOW() , INTERVAL 3 DAY))
ORDER BY price_table.item_id , price_table_old.change_date DESC
這是我的工作人員表觸發...
CREATE TRIGGER `Staff-CopyOnUpdate` BEFORE UPDATE ON `staff`
FOR EACH ROW insert into staff_old
(`sid` , `title`, `firstname` , `surname` , `type`,
`email` , `notify`, `actiondate`, `action`)
VALUES
(OLD.`sid` , OLD.`title`, OLD.`firstname` , OLD.`surname` , OLD.`type`,
OLD.`email` , OLD.`notify`, NOW() , 'updated')
可能重複[mysql:在GROUP BY中使用LIMIT獲得每個組的N個結果?](http://stackoverflow.com/questions/2129693/mysql-using-limit-within-group-by-to-get- n-results-per-group) – Barmar