2013-04-08 100 views
2

有人可以幫助我這個!我有2個表:如何根據某些條件插入或更新?

1.Existing定價表與自定義日期依賴性定價窗口:

id | prod id | start | stop | price 
-----+---------+------------+------------+----------- 
    1 | 65210 | 2012-01-01 | 2013-01-01 | 5.00  
    2 | 54841 | 2012-02-05 | 2013-03-01 | 15.00  
    3 | 51518 | 2012-01-01 | 2013-01-01 | 5.00  
    4 | 8402 | 2012-01-01 | 2017-01-01 | 5.00  
    5 | 1520 | 2012-01-01 | 2050-01-01 | 12.00  
    6 |  959 | 2013-10-01 | 2018-01-01 | 5.00 

2.「新建」定價數據表(用於由每個唯一prod id上述更新表):

prod id | start | stop | price 
    -------+------------+------------+----------- 
    65210 | 2013-01-01 | 2025-01-01 | 5.00  
    54841 | 2013-02-05 | 2017-03-01 | 15.00  
    959 | 2013-01-01 | 2017-01-01 | 5.00  

什麼是更新stop日期表1與stop日期表2假設它仍然是「窗口」的最佳方式?如果現有的stop日期早於「新」start日期,則將使用新的startstop日期創建新的定價記錄。

謝謝!

+2

歡迎來到堆棧溢出。請顯示您迄今爲止嘗試的內容,以及哪些內容無效。否則你的問題可能會被關閉,因爲這不是一個'爲我做'的網站。 – Randy 2013-04-08 22:52:10

+0

另外,它有助於包含您正在使用的SQL平臺。我猜這是mySQL,但你應該包括平臺作爲標籤 – Sparky 2013-04-08 22:56:24

+1

並考慮提供一個sqlfiddle與希望的結果集 – Strawberry 2013-06-16 06:38:22

回答

0

...要在表1與stop日期更新stop日期表2假設它仍然是「窗口」 ...

UPDATE price p JOIN new_price n 
    ON p.prod_id = n.prod_id 
    AND n.start BETWEEN p.start AND p.stop 
    SET p.stop = n.stop 

要插入一個新的記錄」。 ..如果現有stop日期是新start日期前...」

INSERT INTO price (`prod_id`, `start`, `stop`, `price`) 
SELECT n.prod_id, n.start, n.stop, n.price 
    FROM new_price n JOIN price p 
    ON n.prod_id = p.prod_id 
    AND n.start > p.stop 

這裏是SQLFiddle演示