Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建select SQL语句以生成;“合并”;来自两个表的数据集(Oracle DBMS)?_Oracle_Insert Update_Sql - Fatal编程技术网

如何创建select SQL语句以生成;“合并”;来自两个表的数据集(Oracle DBMS)?

如何创建select SQL语句以生成;“合并”;来自两个表的数据集(Oracle DBMS)?,oracle,insert-update,sql,Oracle,Insert Update,Sql,这是我最初的问题: 不幸的是,我省略了一些细节,我想在这里详细说明 所以我有两个表events_source_1和events_source_2。我必须将这些表中的数据集生成结果数据集(我可以将其插入到第三个表中,但这并不重要) events_source_1包含历史事件数据,我必须获取最近的事件(为此,我正在执行以下操作: select event_type,b,c,max(event_date),null next_event_date from events_source_1 group

这是我最初的问题:

不幸的是,我省略了一些细节,我想在这里详细说明

所以我有两个表events_source_1和events_source_2。我必须将这些表中的数据集生成结果数据集(我可以将其插入到第三个表中,但这并不重要)

events_source_1包含历史事件数据,我必须获取最近的事件(为此,我正在执行以下操作:

select event_type,b,c,max(event_date),null next_event_date
from events_source_1
group by event_type,b,c,event_date,null
select event_type,b,c,null event_date, next_event_date
from events_source_2
where b>sysdate;
事件\源\ 2包含未来事件数据,我必须执行以下操作:

select event_type,b,c,max(event_date),null next_event_date
from events_source_1
group by event_type,b,c,event_date,null
select event_type,b,c,null event_date, next_event_date
from events_source_2
where b>sysdate;
如何放置外部联接语句来填充空白(即,当从事件源2中找到相同的事件类型b、c时,下一个事件日期将用找到的第一个日期填充


非常感谢您提前提供的帮助。

希望我答对了您的问题。这将返回
事件源1
的最新
事件日期,每个
事件类型,b,c
,并添加
事件源2
的最低
事件日期

Select es1.event_type, es1.b, es1.c,
       Max(es1.event_date),
       Min(es2.event_date) As next_event_date
From events_source_1 es1
Left Join events_source_2 es2 On (     es2.event_type = es1.event_type
                                   And es2.b = es1.b
                                   And es2.c = es1.c
                                 )
Group By c1.event_type, c1.b, c1.c

希望我答对了你的问题。这应该返回
事件源代码1
的最新
事件日期,每个
事件类型,b,c
,并添加
事件源代码2
的最低
事件日期

Select es1.event_type, es1.b, es1.c,
       Max(es1.event_date),
       Min(es2.event_date) As next_event_date
From events_source_1 es1
Left Join events_source_2 es2 On (     es2.event_type = es1.event_type
                                   And es2.b = es1.b
                                   And es2.c = es1.c
                                 )
Group By c1.event_type, c1.b, c1.c

我最终完成了两步过程:第一步填充事件表1中的数据,第二步合并目标(第一步中的数据集)和另一个源之间的数据。请原谅,但出于法律原因,我不得不混淆表名,并在下面的代码中省略一些列。以下是SQL:

    INSERT INTO EVENTS_TARGET (VEHICLE_ID,EVENT_TYPE_ID,CLIENT_ID,EVENT_DATE,CREATED_DATE) 
select VEHICLE_ID, EVENT_TYPE_ID, DEALER_ID, 
max(EVENT_INITIATED_DATE) EVENT_DATE, sysdate CREATED_DATE
FROM events_source_1 
GROUP BY VEHICLE_ID, EVENT_TYPE_ID, DEALER_ID, sysdate;
这是第二步:

    MERGE INTO EVENTS_TARGET tgt
USING (
  SELECT ee.VEHICLE_ID VEHICLE_ID, ee.POTENTIAL_EVENT_TYPE_ID POTENTIAL_EVENT_TYPE_ID, ee.CLIENT_ID CLIENT_ID,ee.POTENTIAL_EVENT_DATE POTENTIAL_EVENT_DATE FROM EVENTS_SOURCE_2 ee WHERE ee.POTENTIAL_EVENT_DATE>SYSDATE) src
ON (tgt.vehicle_id = src.VEHICLE_ID AND tgt.client_id=src.client_id AND tgt.EVENT_TYPE_ID=src.POTENTIAL_EVENT_TYPE_ID)
WHEN MATCHED THEN
 UPDATE SET tgt.NEXT_EVENT_DATE=src.POTENTIAL_EVENT_DATE
WHEN NOT MATCHED THEN
insert (tgt.VEHICLE_ID,tgt.EVENT_TYPE_ID,tgt.CLIENT_ID,tgt.NEXT_EVENT_DATE,tgt.CREATED_DATE) VALUES (src.VEHICLE_ID, src.POTENTIAL_EVENT_TYPE_ID, src.CLIENT_ID, src.POTENTIAL_EVENT_DATE, SYSDATE)
;

我最终完成了两步过程:第一步填充事件表1中的数据,第二步合并目标(第一步中的数据集)和另一个源之间的数据。请原谅,但出于法律原因,我不得不混淆表名,并在下面的代码中省略一些列。以下是SQL:

    INSERT INTO EVENTS_TARGET (VEHICLE_ID,EVENT_TYPE_ID,CLIENT_ID,EVENT_DATE,CREATED_DATE) 
select VEHICLE_ID, EVENT_TYPE_ID, DEALER_ID, 
max(EVENT_INITIATED_DATE) EVENT_DATE, sysdate CREATED_DATE
FROM events_source_1 
GROUP BY VEHICLE_ID, EVENT_TYPE_ID, DEALER_ID, sysdate;
这是第二步:

    MERGE INTO EVENTS_TARGET tgt
USING (
  SELECT ee.VEHICLE_ID VEHICLE_ID, ee.POTENTIAL_EVENT_TYPE_ID POTENTIAL_EVENT_TYPE_ID, ee.CLIENT_ID CLIENT_ID,ee.POTENTIAL_EVENT_DATE POTENTIAL_EVENT_DATE FROM EVENTS_SOURCE_2 ee WHERE ee.POTENTIAL_EVENT_DATE>SYSDATE) src
ON (tgt.vehicle_id = src.VEHICLE_ID AND tgt.client_id=src.client_id AND tgt.EVENT_TYPE_ID=src.POTENTIAL_EVENT_TYPE_ID)
WHEN MATCHED THEN
 UPDATE SET tgt.NEXT_EVENT_DATE=src.POTENTIAL_EVENT_DATE
WHEN NOT MATCHED THEN
insert (tgt.VEHICLE_ID,tgt.EVENT_TYPE_ID,tgt.CLIENT_ID,tgt.NEXT_EVENT_DATE,tgt.CREATED_DATE) VALUES (src.VEHICLE_ID, src.POTENTIAL_EVENT_TYPE_ID, src.CLIENT_ID, src.POTENTIAL_EVENT_DATE, SYSDATE)
;

您可以将需要使用GROUPBY选择max的表放入虚拟表中,然后按照我在前面问题的答案中提供的方式进行完整的外部联接

在查询顶部添加如下内容:


过去来源为(
选择事件类型、b、c、最大值(事件日期)
来自事件源1
按事件类型、b、c、事件日期分组
)


然后,您可以像使用实际表一样使用pass_source,并在显示的with子句上的结束参数之后继续选择。

您只需将需要使用group by选择max的表制作成一个虚拟表,然后按照我在前面问题的回答中提供的方式进行完整的外部联接即可

在查询顶部添加如下内容:


过去来源为(
选择事件类型、b、c、最大值(事件日期)
来自事件源1
按事件类型、b、c、事件日期分组
)

然后,您可以像使用实际表一样使用pass_source,并在显示的with子句上的结束参数之后继续选择