我正在研究一个癌症数据库,我有一个专栏,其中列出患者当地复发的日期(如果他们有一个),另一个专栏列出病人远程复发的日期(如果他们有一个)。我想创建另一个包含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
答案 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;