要在您的系统上试用的代码和示例数据:
CREATE TABLE "EMP"
( "DR_SID" NUMBER,
"DR_NAME" VARCHAR2(50 BYTE) COLLATE "USING_NLS_COMP",
"ACTIVE_FLAG" VARCHAR2(1 BYTE) COLLATE "USING_NLS_COMP",
"LAST_UPDATED_TIME" TIMESTAMP (6),
"DATA_SOURCE" VARCHAR2(100 BYTE) COLLATE "USING_NLS_COMP",
"ROW_LIMIT" VARCHAR2(50 BYTE) COLLATE "USING_NLS_COMP",
"VERSION#" NUMBER,
"PARENT_DR_SID" NUMBER
)
;
REM INSERTING into EMP
SET DEFINE OFF;
Insert into EMP (DR_SID,DR_NAME,LAST_UPDATED_TIME,VERSION#,PARENT_DR_SID) values (1,'this should not come1',to_timestamp('18-APR-20 05.05.52.425734000 AM','DD-MON-RR HH.MI.SSXFF AM'),1,1);
Insert into EMP (DR_SID,DR_NAME,LAST_UPDATED_TIME,VERSION#,PARENT_DR_SID) values (2,'come',to_timestamp('19-SEP-20 07.18.56.271199000 AM','DD-MON-RR HH.MI.SSXFF AM'),1,2);
Insert into EMP (DR_SID,DR_NAME,LAST_UPDATED_TIME,VERSION#,PARENT_DR_SID) values (3,'come123',to_timestamp('13-FEB-21 05.05.51.645956000 AM','DD-MON-RR HH.MI.SSXFF AM'),1,3);
Insert into EMP (DR_SID,DR_NAME,LAST_UPDATED_TIME,VERSION#,PARENT_DR_SID) values (4,'come456',to_timestamp('13-FEB-21 05.05.51.951505000 AM','DD-MON-RR HH.MI.SSXFF AM'),1,4);
Insert into EMP (DR_SID,DR_NAME,LAST_UPDATED_TIME,VERSION#,PARENT_DR_SID) values (5,'this should not come2',to_timestamp('18-APR-20 05.05.52.425734000 AM','DD-MON-RR HH.MI.SSXFF AM'),2,1);
Insert into EMP (DR_SID,DR_NAME,LAST_UPDATED_TIME,VERSION#,PARENT_DR_SID) values (6,'this should COME',to_timestamp('18-APR-20 05.05.52.425734000 AM','DD-MON-RR HH.MI.SSXFF AM'),3,1);
SELECT DR_SID, DR_NAME, LAST_UPDATED_TIME, VERSION#, PARENT_DR_SID FROM emp ;
下面的查询需要转换为配置单元,有人能帮忙吗?
SELECT DR_SID, DR_NAME, LAST_UPDATED_TIME, VERSION#, PARENT_DR_SID FROM emp t
where (version#,parent_dr_sid)
in (select max(version#),parent_dr_sid from emp group by parent_dr_sid)
;
我试图找出哪条记录是最新的,所以我使用Version#列(如果Version#列有最大值,则该记录是最新的,其以前的记录是旧的,不显示)。
现在看看记录是如何相互链接的,所以我们有两列,dr_sid is pk
和parent_dr_sid
包含相同的值,以表明此记录与哪个旧记录链接。
您可以在这里看到示例,在给定的示例代码中,dr_sid = 1
在parent_dr_sid中出现了3次,parent_dr_sid
的这3条记录的值都与1相同(链接到dr_sid)。
现在我想要下面的O/P,你们能在Hive里做同样的事情吗?
仅供参考-我们无法更新表,因此尝试以这种方式更新记录并以这种方式获取。
DR_SID, DR_NAME, LAST_UPDATED_TIME, VERSION#, PARENT_DR_SID
1 this should not come1 18-APR-20 05.05.52.425734000 AM 1 1
2 come 19-SEP-20 07.18.56.271199000 AM 1 2
3 come123 13-FEB-21 05.05.51.645956000 AM 1 3
4 come456 13-FEB-21 05.05.51.951505000 AM 1 4
5 this should not come2 18-APR-20 05.05.52.425734000 AM 2 1
6 this should COME 18-APR-20 05.05.52.425734000 AM 3 1
3条答案
按热度按时间mqxuamgl1#
使用
left semi join
模拟元组的in
语义。Input.c1|input.c2|v
-|-|
1|1|3.1.3000.7.1.7.0-551
2|2|3.1.3000.7.1.7.0-551
ebdffaop2#
我不知道Hive,所以这些可能是完全无用的建议;然而,看看它是否有帮助。
如果可以在
FROM
子句中使用子查询,则可以执行以下操作:或者,通过串联值使子查询返回单个列。它们*看起来像“time”和“date”(我不知道它们的数据类型,所以您可能需要对这些列应用例如
TO_CHAR
函数;只要它返回所需的结果,就没有问题):643ylb083#
这是奏效的: