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

PostgreSQL查询:生成指定日期范围的ID与日期并筛选有效记录

PostgreSQL查询方案:筛选时间范围内的记录并生成ID和日期

针对你的需求,我会提供一个精准的PostgreSQL查询语句,同时处理started_at和ended_at可为空的场景,确保只保留与指定时间范围('2019-01-02'至'2019-01-04')相关的记录。

核心需求拆解

我们需要筛选出时间区间与目标范围存在重叠的记录,同时覆盖两种特殊情况:

  • ended_at为空:表示记录仍在进行中
  • started_at为空:表示记录开始时间未明确

查询语句

假设你的表名为your_table,字段为id、started_at、ended_at,DATES为查询时的生成日期(用当前日期为例):

SELECT
    id AS "ID",
    CURRENT_DATE AS "DATES"
FROM
    your_table
WHERE
    -- 情况1:两个时间都存在,区间与目标范围重叠
    (started_at <= '2019-01-04' AND ended_at >= '2019-01-02')
    -- 情况2:ended_at为空,记录在目标范围开始前或期间启动,且仍在进行
    OR (started_at <= '2019-01-04' AND ended_at IS NULL)
    -- 情况3:started_at为空,记录在目标范围结束后或期间结束
    OR (started_at IS NULL AND ended_at >= '2019-01-02');

自定义调整说明

如果DATES不是当前日期,而是其他逻辑(比如取记录的开始时间),只需替换CURRENT_DATE为对应的字段或表达式即可:

-- 示例:DATES取started_at的日期部分
SELECT
    id AS "ID",
    DATE(started_at) AS "DATES"
FROM
    your_table
WHERE
    -- 同上的筛选条件
    (started_at <= '2019-01-04' AND ended_at >= '2019-01-02')
    OR (started_at <= '2019-01-04' AND ended_at IS NULL)
    OR (started_at IS NULL AND ended_at >= '2019-01-02');

这个查询会自动排除像ID为4这类完全不在目标时间范围内的记录,确保结果符合你的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:12:51