2

有人可以帮我解决这个问题吗!我有 2 张桌子:

1.具有自定义日期相关定价窗口的现有定价表:

  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    

假设它仍然“在窗口中”,用表 2 中的日期更新stop表 1 中的日期的最佳方法是什么?stop如果现有stop日期早于“新”start日期,则将使用新日期startstop日期创建新定价记录。

谢谢!

4

1 回答 1

0

...用表 2stop中的日期更新表 1 中的stop日期,假设它仍然“在窗口中”...

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演示

于 2013-06-30T05:52:31.597 回答