我在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基本上是窗外可乐的ARRAY_AGG.我需要判断的是,对于A列的每一行,如果日期时间是>=来自C列的数组中的任何元素,可能的解决方案是什么?

注意:在我的实际 case 中,还有另一列D,它是列B的ARRAY_AGG.因此,我将实际判断的是列A&>=来自列C的数组的任何元素,以及列B<=来自列D的数组的任何元素.我主要不知道如何将一个值与数组中的每个元素进行比较.

推荐答案

这里的语法非常好,您只需编写

WHERE A >= Any( C )

如果需要对数组中的元素进行更复杂的判断,还可以使用生成器表达式使其行为类似于多行,然后针对它编写SQL.例如,

WHERE 0 < (SELECT COUNT(*) FROM unnest(C) AS elt WHERE A >= elt)

将是一种更精细(但更笼统)的方式来做同样的事情.

Postgresql相关问答推荐

如何使用postgr sql regex删除重复项和inc表记录

Postgres-pgloader-默认情况下,在PostgreSQL中将列名转换为小写

PostgreSQL 连接字符串的正则表达式

INSERT 语句返回策略违规(USING 表达式)

如何通过 DirectFunctionCall 发送 NULL 参数?

如何使用有限的varchar在postgres中存储单词é

在 KnexJS 中插入

是否可以使用 pgAdmin4 自动格式化/美化 SQL 查询?

在执行 postgresql 函数时提交事务

PostgreSQL ORDER BY 问题 - 自然排序

在 Spring Boot 上使用 Hibernate 映射 PostGIS 几何点字段

在 PostgreSQL 中表示Sparse稀疏数据

PostgreSQL 权限解释

在不存在的行上有select for update块

使用 pg_dump 和 psql -U postgres db_name < ... 移动数据库会导致ERROR: relation "table_name" does not exist

安装时 postgres 的默认用户

如何语法判断 PostgreSQL 配置文件?

具有 DEFAULT NULL 的 MySQL 列 ?

每个数据库提供程序类型允许的最大参数数是多少?

错误:prepared statement "S_1" already exists