在mysql中创建新列,填充其他列中两个日期的早期日期

时间:2012-05-10 02:30:11

标签: mysql windows

我正在研究一个癌症数据库,我有一个专栏,其中列出患者当地复发的日期(如果他们有一个),另一个专栏列出病人远程复发的日期(如果他们有一个)。我想创建另一个包含FIRST重复日期的列,无论它是本地还是远程。我不确定如何继续进行,因为有些患者只有本地或只有远处,因此很多字段都是“空”。以下是我要做的一个例子:

Date_Local     Date_Distant     Date_Any
2010-08-01     2009-05-25       2009-05-25
NULL           2001-01-07       2001-01-07
1999-12-12     NULL             1999-12-12
NULL           NULL             NULL

2 个答案:

答案 0 :(得分:0)

假设您已使用ALTER TABLE语句添加了该列,则可以使用CASE查询中的UPDATE语句填充该列:

ALTER TABLE cancertable ADD Date_Any DATE AFTER Date_Distant;

UPDATE cancertable SET Date_Any = 
  CASE
    WHEN Date_Local IS NOT NULL AND Date_Local <= Date_Distant THEN Date_Local
    WHEN Date_Distant IS NOT NULL AND Date_Distant < Date_Local THEN Date_Distant
    ELSE NULL
  END

上述语句将更新所有行,因为它没有WHERE子句。在执行UPDATE之前,请使用SELECT对其进行测试,以确保它看起来像您期望的那样:

SELECT *,
  CASE
    WHEN Date_Local IS NOT NULL AND Date_Local <= Date_Distant THEN Date_Local
    WHEN Date_Distant IS NOT NULL AND Date_Distant < Date_Local THEN Date_Distant
    ELSE NULL
  END AS Date_Any
FROM cancertable
然而,

考虑一下,你是否确实需要添加了另一列。根据您打算查询此频率的频率,您可以使用上面的SELECT语句创建视图,因此Date_Any值将为“实时”。

答案 1 :(得分:0)

使用此计算日期添加新列可能不是最好的想法。因为您将基于快照(时间点)计算值。但是,如果任一源日期发生变化,则计算出的值可能会变为无效。

如果你决定添加这个额外的计算列,那么我强烈建议你通过插入和更新触发器使它保持最新。但是在应用程序层中处理这个逻辑要好得多。您可以使用以下查询轻松查询推断的重复日期:

SELECT LEAST(COALESCE(Date_Local, Date_Distant), COALESCE(Date_Distant, Date_Local))
FROM TableNameHere WHERE where-clause-here;