计算列中的分组问题以显示自上次更新以来经过的天数,返回“单例选择中的多行”错误

问题描述

作为 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 (将#修改为@)