如何按条件从数组中提取值:查找小于2015的最近日期
SQL需求实现方案
你当前写的代码存在逻辑偏差,而且对同一行数据执行了两次unnest查询,性能开销更高。你可以直接通过一次子查询完成需求,写法更简洁:
(SELECT MAX(x) FROM unnest(c.dates) AS x WHERE x < 2015) AS "15com"
逻辑说明
- 先用
unnest(c.dates)把dates列的数组拆分为单个元素 - 加
WHERE x < 2015过滤出所有小于2015的日期 - 用
MAX(x)取过滤结果的最大值,也就是最接近2015的数值,如果没有符合条件的元素,MAX函数会自动返回null,完全匹配你的需求,不需要额外写CASE WHEN判断。
结果验证
按照你给出的示例数据:
- id=1的行dates数组过滤后剩下2010、2011,取最大值返回2011,符合预期
- id=2的行dates值为2000,符合小于2015的条件,会返回2000。如果你实际期望这一行返回null,大概率是示例中的dates值填写错误,调整WHERE过滤条件即可。
内容的提问来源于stack exchange,提问作者SCH kiman
相关产品推荐
相关产品推荐

