SQL右连接,强制从右侧仅返回一个值
表1“右联接”表2将从右表表2返回多个结果。如何使其仅从表2中返回一个结果,其中表1上的日期最高。要从表2中选择id,max=maxdate;要从表1上选择id,max=maxdate;要从表2中选择id,max=maxdate;要从查询中检索前N个记录,可以使用以下语法:SQL右连接,强制从右侧仅返回一个值,sql,oracle10g,Sql,Oracle10g,表1“右联接”表2将从右表表2返回多个结果。如何使其仅从表2中返回一个结果,其中表1上的日期最高。要从表2中选择id,max=maxdate;要从表1上选择id,max=maxdate;要从表2中选择id,max=maxdate;要从查询中检索前N个记录,可以使用以下语法: table 1 --- id , name table2 --- id , activity, datefield PS:我不熟悉PL/SQL,所以从查询中检索前N个记录可能是我错了,您可以使用以下语法: table 1
table 1
---
id , name
table2
---
id , activity, datefield
PS:我不熟悉PL/SQL,所以从查询中检索前N个记录可能是我错了,您可以使用以下语法:
table 1
---
id , name
table2
---
id , activity, datefield
PS:我不熟悉PL/SQL,所以可能我错了你写的问题信息很差,但我会试着举个例子来帮助你 您有一个表a和一个表B,需要获取与表a相关的表B的顶部日期 示例表: 如果执行此操作,请执行以下操作: 您可以获得A和B的所有信息,这些信息由ID关联,在这个理论案例中,ID是两个表链接关系的公共字段
SELECT * FROM A RIGHT JOIN B ON B.ID = A.ID
但是您只需要表A中每个元素的最后一个日期,即B的顶部日期
接下来,如果只需要获取最早日期,则需要通过B.AID对查询进行分组,并仅获取最早日期
A.AID | A.NAME | B.BID | B.AID | B.DateField
------|--------|-------|-------|--------------
1 | Foo | 1 | 1 | 2000-01-01
1 | Foo | 2 | 1 | 2000-01-02
2 | Bar | 3 | 2 | 2000-01-01
该操作的结果是:
在这个结果中,我删除了一些重复的字段,如A.AID和B.AID,它们是两个表之间的关系,或者是不需要的
提示:如果sql中有更多的表,也可以这样做。sql进行查询,然后应用一个分组,使用B将重复B的次数限制在最早的日期。
关于你的问题,你写的信息很差,但我会试着举个例子来帮助你 您有一个表a和一个表B,需要获取与表a相关的表B的顶部日期 示例表: 如果执行此操作,请执行以下操作: 您可以获得A和B的所有信息,这些信息由ID关联,在这个理论案例中,ID是两个表链接关系的公共字段
SELECT * FROM A RIGHT JOIN B ON B.ID = A.ID
但是您只需要表A中每个元素的最后一个日期,即B的顶部日期
接下来,如果只需要获取最早日期,则需要通过B.AID对查询进行分组,并仅获取最早日期
A.AID | A.NAME | B.BID | B.AID | B.DateField
------|--------|-------|-------|--------------
1 | Foo | 1 | 1 | 2000-01-01
1 | Foo | 2 | 1 | 2000-01-02
2 | Bar | 3 | 2 | 2000-01-01
该操作的结果是:
在这个结果中,我删除了一些重复的字段,如A.AID和B.AID,它们是两个表之间的关系,或者是不需要的
提示:如果sql中有更多的表,也可以这样做。sql进行查询,然后应用一个分组,使用B将重复B的次数限制在最早的日期。
我的解决办法是
从表1中选择右键连接表1上的表2。id=table2.id和table2.datefield=从表2中选择maxdatefield,其中table2.id=table1.id我的解决方案是
从表1中选择右键连接表1上的表2。id=table2.id和table2.datefield=从表2中选择maxdatefield,其中table2.id=table1.idAnalytics
测试数据:
B.AID | A.NAME | B.DateField
------|--------|--------------
1 | Foo | 2000-01-02
2 | Bar | 2000-01-01
查询:
create table t1
(id number primary key,
name varchar2(20) not null
);
create table t2
(id number not null,
activity varchar2(20) not null,
datefield date not null
);
insert into t1 values (1, 'foo');
insert into t1 values (2, 'bar');
insert into t1 values (3, 'baz');
insert into t2 values (1, 'foo activity 1', date '2009-01-01');
insert into t2 values (2, 'bar activity 1', date '2009-01-01');
insert into t2 values (2, 'bar activity 2', date '2010-01-01');
outerwhere子句将从t2元组中过滤掉除最大日期以外的所有数据,但保留在空行中,其中t2中没有匹配行
结果:
select id, name, activity, datefield
from (select t1.id, t1.name, t2.id as t2_id, t2.activity, t2.datefield,
max(datefield) over (partition by t1.id) as max_datefield
from t1
left join t2
on t1.id = t2.id
)
where ( (t2_id is null) or (datefield = maxdatefield) )
分析
测试数据:
B.AID | A.NAME | B.DateField
------|--------|--------------
1 | Foo | 2000-01-02
2 | Bar | 2000-01-01
查询:
create table t1
(id number primary key,
name varchar2(20) not null
);
create table t2
(id number not null,
activity varchar2(20) not null,
datefield date not null
);
insert into t1 values (1, 'foo');
insert into t1 values (2, 'bar');
insert into t1 values (3, 'baz');
insert into t2 values (1, 'foo activity 1', date '2009-01-01');
insert into t2 values (2, 'bar activity 1', date '2009-01-01');
insert into t2 values (2, 'bar activity 2', date '2010-01-01');
outerwhere子句将从t2元组中过滤掉除最大日期以外的所有数据,但保留在空行中,其中t2中没有匹配行
结果:
select id, name, activity, datefield
from (select t1.id, t1.name, t2.id as t2_id, t2.activity, t2.datefield,
max(datefield) over (partition by t1.id) as max_datefield
from t1
left join t2
on t1.id = t2.id
)
where ( (t2_id is null) or (datefield = maxdatefield) )
需要更多的上下文:您只是对表2中某些条件下的最大日期感兴趣,还是对表2中的一组列感兴趣?表1与表2、表3、表4……等连接。。我想从表2中得到一行,但在整个查询中,我想返回一组列需要更多的上下文:您只是对表2中某些条件下的最大日期感兴趣,还是对表2中的一组列感兴趣?表1与表2、表3、表4等连接。。我想从表2中得到一行,但是整个查询,我想返回一堆列。我的表1连接到了表2旁边的许多其他表,所以我不能像您建议的那样使用查询,因为这将返回1个结果。请参阅我的最新问题。我希望表2只返回最新的DateField。我的表1与表2旁边的许多其他表连接,因此我不能像您建议的那样使用查询,因为这将返回1个结果。请参阅我的最新问题。我想要表2只返回最新的datefieldnope,这不是我想要的。我仍然希望在最后返回多个结果,正如我提到的,我还加入了表2旁边的许多其他表。但当“与表2右连接”时,这部分我想返回一条带有max datenope的记录,这不是我想要的。我仍然希望在最后返回多个结果,正如我提到的,我还加入了表2旁边的许多其他表。但当“right join with table2”时,这部分我想返回1条记录的最大日期