sql - 基于另一列创建新的值列
问题描述
我是 SQL 新手,被要求根据 Oracle Sql 中的另一列创建两个新的值列。
下面是数据的样子:在每个 ID 下,还有一个 IDseq 代表这个 ID 中的一个子段,每个都有一个 Start 和 End 的地方。
SQL需要帮我找到每个ID下最小的IDseq,然后找到对应的起始位置。同理,找到每个ID下最大的IDseq,然后找到对应的结束位置。每个唯一 ID 将只有一个起点和一个目的地,它们将显示在两个新列中。我想创建两个新列(见下文)- Origin 和 Dest 以显示每个 ID 的起点和终点。
非常感谢您的帮助。
解决方案
我在看到 Oracle 标签之前写了这个。MySQL 有派生临时表问题,也许你可以避免 Oracle 中的额外问题?
CREATE TEMPORARY TABLE tmp_sequence (
IDSeq INT NOT NULL AUTO_INCREMENT, range_id VARCHAR(3), range_start CHAR(1), range_end CHAR(1), origin CHAR(1), destination CHAR(1), PRIMARY KEY (IDSeq)
);
INSERT INTO tmp_sequence (range_id, range_start, range_end)
VALUES ('ABC', 'X', 'Y'), ('ABC', 'Y', 'H'), ('ABC', 'H','L'), ('ABC','L', 'G'),
('BCD','Q','D'), ('BCD','D','H'),('BCD','H','Z');
CREATE TEMPORARY TABLE tmp_min AS
SELECT MIN(IDSeq) min_id, range_id
FROM tmp_sequence
GROUP BY range_id;
CREATE TEMPORARY TABLE tmp_start AS
SELECT s.min_id, s.range_id, t.range_start
FROM tmp_sequence t
JOIN tmp_min s ON t.IDSeq = s.min_id
AND t.range_id = s.range_id;
UPDATE tmp_sequence t
JOIN tmp_start s ON t.range_id = s.range_id
SET origin = s.range_start;
CREATE TEMPORARY TABLE tmp_max AS
SELECT MAX(IDSeq) max_id, range_id
FROM tmp_sequence
GROUP BY range_id;
CREATE TEMPORARY TABLE tmp_end AS
SELECT s.max_id, s.range_id, t.range_end
FROM tmp_sequence t
JOIN tmp_max s ON t.IDSeq = s.max_id
AND t.range_id = s.range_id;
UPDATE tmp_sequence t
JOIN tmp_end s ON t.range_id = s.range_id
SET destination = s.range_end;
DROP TEMPORARY TABLE tmp_sequence;
DROP TEMPORARY TABLE tmp_min;
DROP TEMPORARY TABLE tmp_start;
DROP TEMPORARY TABLE tmp_end;
推荐阅读
- python - Scipy:使用向量输入和标量输出查找函数的根
- javascript - 在 React.js 中使用 service worker(与 Indexeddb 进行后台同步)
- java - 如果实际结果太大,Spring 服务返回空结果
- arrays - 当我在字符(y 或 n)的位置取字符串(是或否)时,程序无法继续
- json - 在 javascript 中处理 JSON 数据
- microsoft-graph-api - 如何以编程方式使用 Microsoft 图形 API 获取用户数据
- node.js - 如何在将消息发布到 Google Cloud Pub/Sub 时找出未找到的资源?
- flutter - Flutter webview重新登录问题
- javascript - 使用 GCF/pubsub 更新 Firestore 文档中的计数器
- django - 如何在 drf yasg (swagger) 中更改日期字段的示例格式值