gpt4 book ai didi

PostgreSQL 添加基于数据递增的 id 列

转载 作者:行者123 更新时间:2023-11-29 11:50:14 32 4
gpt4 key购买 nike

我对使用 Postgres 比较陌生,我有 MySQL 背景。我在 Windows x64 上使用 Postgres 9.3.4。

我们在多个固定长度的文本文件中提供数据。每行的第一个数字是 1 到 4 之间的数字,表示该行中数据的记录类型。行按顺序分组,因此始终首先是类型 1 的行,然后是零个或多个其他类型的行。

data_x.txt
---------------------
1data01
2data02
4data03
4data04
1data05
1data06
3data07

为了将其导入 Postgres,我使用了以下 SQL 命令:

CREATE TABLE data_raw (
raw_data TEXT
);

COPY data_raw FROM 'C:\path\data_x.txt' ...; -- Repeated for each file

ALTER TABLE data_raw
ADD COLUMN indicator integer;

UPDATE data_raw SET
indicator = CAST(substr(raw_data, 1, 1) AS integer),
raw_data = substr(raw_data, 2);

然后我为 4 种记录类型中的每一种创建表:

CREATE TABLE table_1 SELECT raw_data FROM data_raw WHERE indicator = 1;
CREATE TABLE table_2 SELECT raw_data FROM data_raw WHERE indicator = 2;
CREATE TABLE table_3 SELECT raw_data FROM data_raw WHERE indicator = 3;
CREATE TABLE table_4 SELECT raw_data FROM data_raw WHERE indicator = 4;

我需要做的是,但不确定如何为指标以 1 开头的每个组添加一个“id”列。我们将获得每周更新,因此我需要为每个批处理指定初始 id .因此,如果此批处理从 id = 225 开始,那么我想从示例数据中获取以下表格:

table_1
id | raw_data
--------------------
225 | data01
226 | data05
227 | data06

table_2
id | raw_data
--------------------
225 | data02

table_3
id | raw_data
--------------------
227 | data07

table_4
id | raw_data
--------------------
225 | data03
225 | data04

最佳答案

尝试像这样为每个数据组生成 id:

SELECT sum(case when indicator = 1 then 1 else 0 end ) over(order by /*something to define the order*/) as id_base
from data_raw

它会为每个数据组生成一个id_base。如果您需要从某个特定的 ID 开始 - 只需将此 ID 添加到 id_base

关于PostgreSQL 添加基于数据递增的 id 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25075746/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com