2012-09-17 28 views
0

我在为以下方案找到解决方案时遇到问题。 我有一个产品有3个记录,它有以下start_date和end_date。比较日期并在MySQL中创建缺少的记录

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 

在上述所有情况下,我需要创建与丢失日期第四届记录(例如,在案例1,我需要从21日到30日的记录),并想删除它不再需要RECORD1如果我有缺失日期的记录。

有什么办法可以一气呵成吗? 我已经尝试使用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

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

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 
+0

您可能要考虑在交易中包装这个,例如如果这是一次性转换。 – Atastor

+0

感谢那... – abcreddy

+0

没问题:-)如果这就是你要找的答案,我不介意你是否检查它作为答案;-) – Atastor