问题描述
作为 Computed table column with MAX value between rows containing a shared value 的后续问题, 考虑以下表格和值:
T1ID T1DATE T2ID FK_T1ID T2DATE
1 01/03/21 1 1 04/03/21
2 05/03/21 2 1 05/03/21
3 05/03/21 3 1 07/03/21
4 null 4 2 07/03/21
T1 表中的预期结果(假设当前日期为 10.03.21):
T1ID T1DATE DATEDIFF (computed column)
1 01/03/21 3 (calculated from record 3 of T2,since it is most recent)
2 05/03/21 3 (calculated from record 4 of T2,more recent than T1DATE)
3 05/03/21 5 (calculated from T1DATE,since no rec in T2 where T1ID = FK_T1ID)
4 null null (null since neither T1DATE is available or rec with T1ID = FK_T1ID)
我想在 T1 中写入一个计算列,用于计算自最近的 T2DATE 以来已经过去了多少天,如果不存在 T2 日期,则从 T1DATE 计算。
我尝试使用
alter table T1 add DATEDIFF computed by
((SELECT DATEDIFF (day,COALESCE(MAX(T2DATE),T1DATE),CURRENT_DATE)
FROM T1 LEFT JOIN T2 ON T1ID=FK_T1ID GROUP BY T1ID,T1DATE))
这确实会产生一个有效的查询(当在 libre base 中运行时,直接通过 firebird 运行)但是当我在 libre base 或 florarobin 中打开 T1 表时,我收到错误“单例选择中的多行”。 在 GROUP BY 部分添加 T1DATE 之前,我在运行查询时遇到聚合错误,虽然我不明白为什么,因为 T1DATE 对应于一个 T1ID。
我正在使用 firebird 3.0.7 和 florarobin 和 libre office 7.0.4。
我确实设法通过不同的方式以某种方式解决了这个问题,使用了 3 个计算列(一个用于 DIFF(T1DATE),一个用于 DIFF(MAX(T2DATE)),第三个用于这两者之间的 COALESCE)。 最初这不起作用,因为 libre base 给出了“单例选择中的多行”,但在撰写本文时,这不再发生,日期按预期计算。
如何修复上述计算列以避免使用 3 个计算列?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)