You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中找出未被其他数组包含的日期数组?

解决方案

首先确认你的dates列如果是逗号分隔的文本,需要先转换为日期数组;如果已经是date[]类型,可跳过转换部分。

核心思路是:筛选出不存在其他行的日期数组完全包含当前行日期数组的记录,同时排除自身比较的情况。

最终SQL查询

SELECT t1.*
FROM your_table_name t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table_name t2
    WHERE t2.dates <> t1.dates -- 排除自身
      AND string_to_array(t1.dates, ',')::date[] <@ string_to_array(t2.dates, ',')::date[]
);

说明

  • string_to_array(dates, ',')::date[]:将逗号分隔的日期字符串转换为PostgreSQL日期数组,若你的dates本身就是date[]类型,直接替换为t1.dates和t2.dates即可。
  • <@:PostgreSQL数组操作符,用于判断左数组是否被右数组完全包含。
  • NOT EXISTS:确保当前行的日期数组没有被其他任何行的日期数组包含。

执行上述查询后,会返回你期望的三条记录:

  • 2023-09-03至2023-09-06的4天数组(没有更大的数组包含它)
  • 2023-09-18至2023-09-21的4天数组
  • 2023-09-23的1天数组(无其他数组包含它)

内容的提问来源于stack exchange,提问作者OldFred

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:45:11