postgresql - 将一列与另一列(数组)的每个元素进行比较

标签 postgresql

我的 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/

相关文章:

postgresql - 具有精度参数的 LOCALTIMESTAMP 函数

sql - 从表中选择一组动态列并获取每个列的总和

postgresql - 获取全文搜索配置语言的完整列表

sql - PostgreSQL 为什么可以在子查询 WHERE 中引用表别名而不是 FROM

postgresql - 如何使用字符串作为 PostgreSQL 咨询锁的键?

json - 从 Postgres 和 jOOQ 中的分层表递归生成 JSON 树

SQL - postgres - 图中的最短路径 - 递归

django - 按交替值排序查询集

mysql - 带有远程数据库的 Rails 应用程序 - 我应该在应用程序中复制还是远程连接

ruby-on-rails - 如何检查我的 heroku 应用程序正在使用哪个数据库?