比较日期并在MySQL中创建缺失的记录

时间:2012-09-17 10:46:49

标签: mysql ruby-on-rails

我在寻找以下方案的解决方案时遇到了问题。 我有一个产品的3条记录,其中包含以下start_date和end_date。

Case:1
record1: 03-10-2012 and 30-10-2012
record2: 03-10-2012 and 10-10-2012
record3: 11-10-2012 and 20-10-2012

Case:2
record1: 03-10-2012 and 30-10-2012
record2: 11-10-2012 and 20-10-2012
record3: 21-10-2012 and 30-10-2012

Case:3
record1: 03-10-2012 and 30-10-2012
record2: 03-10-2012 and 10-10-2012
record3: 21-10-2012 and 30-10-2012

在上述所有情况下,我需要创建缺少日期的第4条记录(例如在case1中,我需要从21日到30日的记录)并且想删除记录1,如果我有记录1则不再需要记录丢失的日期。

有没有办法一次性完成所有事情? 我试过使用case命令但没有运气。

这就是我写的。

select MIN(end_date) AS min_end_date, MIN(start_date) AS min_start_date, 
    CASE WHEN MIN(start_date) <= MIN(end_date) AND MIN(start_date) > DATE '#{start_date}' THEN DATE_SUB(MIN(start_date), INTERVAL 1 day)
        ELSE MIN(end_date)
        END AS min_date

提前致谢。

1 个答案:

答案 0 :(得分:1)

嗯......你可以做到以下几点:

remainders=(record1.start_date..record1.end_date).to_a - (record2.start_date..record2.end_date).to_a - (record3.start_date..record3.end_date).to_a

之后,您可以进行安全检查 - 如果您信任您的数据,则可以使用 -

if (remainders.first..remainders.last).to_a == remainders
  record4.start_date = remainders.first
  record4.end_date = remainders.last
  record1.destroy
else
  raise
end