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

修正PostgreSQL表中item_number与item_date的顺序异常问题

PostgreSQL日期异常修正问题

表结构

CREATE TABLE IF NOT EXISTS items
(
    item_number integer NOT NULL DEFAULT nextval('items_nro_seq'::regclass),
    item_date date,
    CONSTRAINT items_pk PRIMARY KEY (item_number)
);

逻辑约束

  • item_number唯一且连续递增
  • 同一item_date可对应多个item_number
  • 若item_number X大于Y,但X的item_date小于Y的item_date,属于异常(可能存在)

示例数据

item_numberitem_date
18562023-10-21
18552023-10-21
18542023-10-22
18532023-10-22
18522023-10-21
18512023-10-21
18502023-10-21

修正需求

需要识别并将item_number为1853和1854的item_date修改为'2023-10-21',修正后数据如下:

item_numberitem_date
18562023-10-21
18552023-10-21
18542023-10-21
18532023-10-21
18522023-10-21
18512023-10-21
18502023-10-21

尝试过的方法及问题

我尝试使用row_number、lag函数、子查询,还定义了迭代函数,但得到的结果不符合需求——把item_number 1855和1856的日期改为了'2023-10-22'。使用的函数代码如下:

CREATE OR REPLACE FUNCTION correct_dates() RETURNS VOID AS $$
DECLARE
    item record;
    actual_date date;
BEGIN
    FOR item IN
        SELECT item_number, item_date
        FROM items
        ORDER BY nro, fecha
    LOOP
        IF item.item_date < actual_date THEN
            UPDATE items
            SET item_date = actual_date
            WHERE item_number = item.item_number AND item_date = item.item_date;
        ELSE
            actual_date := item.item_date;
        END IF;
    END LOOP;
END;
$$ LANGUAGE plpgsql;

恳请帮忙解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:53:11