oracle SQL帮助用两个键链接三个表,一个是最近的日期,另一个是最大的负载[关闭]

c0vxltue  于 2023-06-05  发布在  Oracle
关注(0)|答案(1)|浏览(236)

已关闭,此问题需要更focused。目前不接受答复。
**想改善这个问题吗?**更新问题,使其仅通过editing this post关注一个问题。

4天前关闭。
Improve this question
(我正在编辑问题以显示表定义)。
我想获取存储在三个不同表中的数据。

CREATE TABLE T1 (LocationNum varchar(255),TypeCode varchar(255),Size varchar(255),PriVoltage varchar(255),SecVoltage varchar(255));
CREATE TABLE T2 (SequenceNum varchar(255),InDate date,LocationNum varchar(255));
CREATE TABLE T3 (SequenceNum varchar(255),ReadDate date,KVA int);

这里有一些数据:

INSERT INTO T1 VALUES ('GR0022000123', 'T', '225kva', '12.4kv', '120/240');
INSERT INTO T1 VALUES ('DE0068000475', 'T', '225kva', '12.4kv', '120/240');
INSERT INTO T2 VALUES ('E123', TO_DATE('2023/01/01','yyyy/mm/dd'), 'GR0022000123');
INSERT INTO T2 VALUES ('E124', TO_DATE('2023/02/01','yyyy/mm/dd'), 'GR0022000123');
INSERT INTO T3 VALUES ('E123', TO_DATE('2023/01/01','yyyy/mm/dd'), '5');
INSERT INTO T3 VALUES ('E123', TO_DATE('2023/02/01','yyyy/mm/dd'), '7');
INSERT INTO T3 VALUES ('E123', TO_DATE('2023/03/01','yyyy/mm/dd'), '6');
INSERT INTO T3 VALUES ('E124', TO_DATE('2023/01/01','yyyy/mm/dd'), '5');
INSERT INTO T3 VALUES ('E124', TO_DATE('2023/02/01','yyyy/mm/dd'), '7');
INSERT INTO T3 VALUES ('E124', TO_DATE('2023/03/01','yyyy/mm/dd'), '6');

我需要表1中所有以'GR'开始且TypeCode ='T'的LocationNum的列表。
对于列表中的每个LocationNum,我需要在Table 2中找到最近日期的SequenceNum。
然后,对于SequenceNum,我需要KVA的最大值和表3中相应的ReadDate。
最终清单应包括:LocationNum、Size、SecVoltage、ReadDate和Maximum KVA。
所以对于我提供的数据,我想要:GR0022000123,225kva,120/240,2023-02-01,7
以下是我所得到的:

select* from (select * from T3 where SequenceNum = 'E123' order by ReadDate desc) where ROWNUM=1;

(It是Oracle数据库。)

9rnv2umw

9rnv2umw1#

这里有一个选项,它在CTE中执行过滤的第一部分,然后将该结果集与第三个表连接以获得最终结果。请注意,我将列size重命名为csize,因为 size 是保留字,不能用于此目的。

SQL> WITH
  2     temp
  3     AS
  4        (SELECT a.locationnum,
  5                a.csize,
  6                a.secvoltage,
  7                b.sequencenum,
  8                b.indate,
  9                ROW_NUMBER () OVER (PARTITION BY b.locationnum ORDER BY indate DESC) rn
 10           FROM t1 a JOIN t2 b ON b.locationnum = a.locationnum
 11          WHERE     a.locationnum LIKE 'GR%'
 12                AND a.typecode = 'T')
 13  SELECT t.locationnum,
 14         t.csize,
 15         t.secvoltage,
 16         c.readdate,
 17         c.kva
 18    FROM temp  t
 19         JOIN t3 c
 20            ON     c.sequencenum = t.sequencenum
 21               AND c.readdate = t.indate
 22   WHERE t.rn = 1;

LOCATIONNUM  CSIZE      SECVOLTAGE READDATE          KVA
------------ ---------- ---------- ---------- ----------
GR0022000123 225kva     120/240    2023-02-01          7

SQL>

相关问题