提问人:Speaker 提问时间:10/31/2023 最后编辑:Ken WhiteSpeaker 更新时间:10/31/2023 访问量:23
正确的中间值,以确保表格中需要日期和数字的顺序(数字是唯一的)
correct intermediate values to ensure order in table where is needed a date and number correlative order (number is unique)
问:
我有一个具有这种结构的表:
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 Y 的 item_number,在X.item_date < Y.item_date时是一个错误(但可能存在)。
示例数据:
item_number | item_date |
---|---|
1856 | 2023-10-21 |
1855 | 2023-10-21 |
1854 | 2023-10-22 |
1853 | 2023-10-22 |
1852 | 2023-10-21 |
1851 | 2023-10-21 |
1850 | 2023-10-21 |
我需要一个解决方案来识别样本数据中 item_number、1853 和 1854 的item_date并将其更改为“2023-10-21”。
item_number | item_date |
---|---|
1856 | 2023-10-21 |
1855 | 2023-10-21 |
1854 | 2023-10-21 |
1853 | 2023-10-21 |
1852 | 2023-10-21 |
1851 | 2023-10-21 |
1850 | 2023-10-21 |
我尝试过使用row_number和滞后功能。我尝试使用子查询进行查询。我尝试定义函数并迭代。 我得到的最佳结果是将 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;
谁能帮我弄清楚?
答: 暂无答案
评论
item_number integer NOT NULL DEFAULT nextval('items_nro_seq'::regclass)
item_number