Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
若索引已出现在表中,则MySQL将日期列更新为第一个日期_Mysql_Database - Fatal编程技术网

若索引已出现在表中,则MySQL将日期列更新为第一个日期

若索引已出现在表中,则MySQL将日期列更新为第一个日期,mysql,database,Mysql,Database,我有一个MySQL数据库(约1200万行),其中包含医疗索赔数据 该问题的三栏内容-索赔编号、发布日期、原始提交日期。例如: claim_no | release_dt | original_submit_date -------------------------------------------- 11111111 | 2017-06-15 | 2017-05-10 22222222 | 2017-06-15 | 2017-06-15 11111111 | 2017-05-10 | 201

我有一个MySQL数据库(约1200万行),其中包含医疗索赔数据

该问题的三栏内容-索赔编号、发布日期、原始提交日期。例如:

claim_no | release_dt | original_submit_date
--------------------------------------------
11111111 | 2017-06-15 | 2017-05-10
22222222 | 2017-06-15 | 2017-06-15
11111111 | 2017-05-10 | 2017-05-10
33333333 | 2017-06-11 | 2017-06-11
如果索赔编号是每个索赔的ID,则release_dt是索赔提交的日期,而original_submit_date是索赔提交的第一个日期(由于重新付费,索赔编号可能在数据库中出现多次)。在该示例中,权利要求11111111在2017-06-15和2017-05-10出现了两次。因为2017-05-10是最早的提交日期,这是填充原始提交日期列的日期

数据库每月更新一次,每月提交一次新的索赔金额。此新数据具有发布日期,但不具有原始提交日期。这需要根据索赔编号是否已出现在数据库中添加。如果是,则需要将原始的提交日期列从其他外观更新为原始提交日期列。如果不是,那么原始的提交日期列需要取release dt的值

例:

如果我添加两个新行-

claim_no | release_dt | original_submit_date
--------------------------------------------
11111111 | 2017-06-20 | 2017-05-10
22222222 | 2017-06-15 | 2017-06-15
11111111 | 2017-05-10 | 2017-05-10
33333333 | 2017-06-11 | 2017-06-11
11111111 | 2017-06-20 |
44444444 | 2017-06-20 |
然后我需要一个更新原始提交日期的查询,如下所示-

claim_no | release_dt | original_submit_date
--------------------------------------------
11111111 | 2017-06-20 | 2017-05-10
22222222 | 2017-06-15 | 2017-06-15
11111111 | 2017-05-10 | 2017-05-10
33333333 | 2017-06-11 | 2017-06-11
11111111 | 2017-06-20 | 2017-05-10
44444444 | 2017-06-20 | 2017-06-20
因为第11111111号索赔已经在数据库中,它采用了该索赔的原始提交日期,但4444是一个新索赔,因此它从自己的行中获取了发布日期

该表在索赔编号和发布日期(分别)上编制索引。我曾经考虑过做一个自连接,并在原始的提交日期列为空时更新它,但这是一个我从未使用过的策略,我不确定这是否是最有效的方法,查询会是什么样子,或者它是否会工作


有什么想法吗?

正确的(规范化的)方法是添加一个新表,其中
claim\u no
作为主键,原始提交日期。(您可以使用当前表上的触发器来更新该表。)虽然这对于所有数据库来说都是正确的方法,但MySQL在
update
语句中还有限制,您不能直接从您试图更新的表中读取(这需要一些资源)(例如,在内部将数据复制到临时表)如果您想编写“自我更新”。如果您想保持当前(非规范化)结构(例如,因为您无法更改代码的其余部分)您可以在更新第二个表后更新该表,或者使用临时可导入项。此外,如果您在该表上使用触发器,则可以仅继续使用一个表,但其缺点是您只能更新当前行。这意味着如果(例如)以后会添加早期声明(例如,在当前导入中,您可能有两次索赔,但顺序错误),现有日期将保持错误(这对于非规范化数据来说始终是一个潜在问题)。感谢您的建议-我将在下周尝试,看看进展如何。