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

标签 mysql ruby-on-rails

我在寻找以下场景的解决方案时遇到问题。 我有 3 条产品记录,其起始日期和结束日期如下。

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 条记录(例如,在情况 1 中,我需要从 21 日到 30 日的记录),并且希望删除不再需要的记录 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

提前致谢。

最佳答案

嗯......你可以执行以下操作:

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

关于mysql - 比较日期并在 MySQL 中创建缺失的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12457693/

相关文章:

ruby-on-rails - 转储数据库时 yaml_db 不工作

ruby-on-rails - rails + Angular : Redirection After Sign-In/Up

ruby-on-rails - 在 Rails 控制台中按日期查找记录

ruby-on-rails - Nitrous, Heroku : create new PostgreSQL user, 限制权限

ruby-on-rails - 如何在Rails 3应用程序中使用Dob日期时间字段搜索age_from至age_to?

mysql - 使用 CodeIgniter Active Record 类按域名扩展名排序

php - 缓存并迭代关联数组的数组

mysql - 外键——id 或只是 UNIQUE 列

php - jQuery UI 自动完成 - 未找到结果

PHP MySQL 多标签搜索