我的 postgresql 表中有 3 列,例如:
col A col B col C
---------- --------- ---------
2020-01-01 2024-01-01 {2020-01-01, 2020-05-01, 2022-03-01}
2020-05-01 2021-05-01 {2020-01-01, 2020-05-01, 2022-03-01}
2022-03-01 2023-03-01 {2020-01-01, 2020-05-01, 2022-03-01}
col C 基本上是窗口上 colA 的 array_agg。我需要检查的是,对于 A 列的每一行,日期时间是否 >= C 列数组的任何元素。可能的解决方案是什么?
注意:在我的实际情况中,还有另一个 col D,它是 col B 的 array_agg。所以我实际上要检查的是 col A >= col C 和 col B <= 中的数组元素col D 中数组的任何元素。我主要不知道如何将值与数组中的每个元素进行比较。
最佳答案
这里的语法很好,你可以直接写
WHERE A >= Any( C )
如果您需要对数组中的元素进行更复杂的检查,您还可以使用生成器表达式使其像多行一样,然后针对它编写 SQL。例如,
WHERE 0 < (SELECT COUNT(*) FROM unnest(C) AS elt WHERE A >= elt)
将是做同样事情的更复杂(但更通用)的方法。
关于postgresql - 将一列与另一列(数组)的每个元素进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73611601/