Sql 用填充字段的最大日期连接两个表
我有一个场景,我应该通过将a和B与填充字段的最大日期连接起来,从表B中获取VAL,例如: A: B: 预期结果:Sql 用填充字段的最大日期连接两个表,sql,oracle,Sql,Oracle,我有一个场景,我应该通过将a和B与填充字段的最大日期连接起来,从表B中获取VAL,例如: A: B: 预期结果: 1 2 t1 v11 01/31/2020 2 3 t2 v22 03/30/2020 提前谢谢。试试这个 select A.* , maxB.* , B.VAL from A join B on A.f1 = B.F1 or A.f2 = B.F2 join ( select F1, F2 ,VAL , max(date) dat
1 2 t1 v11 01/31/2020
2 3 t2 v22 03/30/2020
提前谢谢。试试这个
select A.* , maxB.* , B.VAL
from
A
join B
on A.f1 = B.F1
or A.f2 = B.F2
join
(
select
F1, F2 ,VAL , max(date) date
from
B
group by F1,F2
) maxB
on
B.date = maxB.date
and (
maxB.f1 = B.F1
or maxB.f2 = B.F2
)
选择
R.F1、R.F2、R.F3、R.VAL、R.date
从…起
选择
A.F1、A.F2、A.F3、,
B.VAL,B.date,排名按A.F1,A.F2,A.F3超额分配按B.date描述为排名
从
在B.F1=A.F1或B.F2=A.F1上连接B
R
哪里
R.秩=1
试试这个
选择
R.F1、R.F2、R.F3、R.VAL、R.date
从…起
选择
A.F1、A.F2、A.F3、,
B.VAL,B.date,排名按A.F1,A.F2,A.F3超额分配按B.date描述为排名
从
在B.F1=A.F1或B.F2=A.F1上连接B
R
哪里
R.秩=1
您可以在子查询中使用行数分析函数
WITH AB AS
(
SELECT A.f1, A.f2, B.val, B."date",
ROW_NUMBER() OVER (PARTITION BY NVL(B.f1, B.f2) ORDER BY "date" DESC) AS rn
FROM A
JOIN B
ON A.f1=B.f1 OR A.f1=B.f2
)
SELECT f1,f2,val,"date"
FROM AB
WHERE rn = 1
如果日期值的值相等,且所有值都应包含在结果集中,则用稠密秩函数替换行数
您可以在子查询中使用行数分析函数
WITH AB AS
(
SELECT A.f1, A.f2, B.val, B."date",
ROW_NUMBER() OVER (PARTITION BY NVL(B.f1, B.f2) ORDER BY "date" DESC) AS rn
FROM A
JOIN B
ON A.f1=B.f1 OR A.f1=B.f2
)
SELECT f1,f2,val,"date"
FROM AB
WHERE rn = 1
如果日期值的值相等,且所有值都应包含在结果集中,则用稠密秩函数替换行数
您可以使用最大值和第一个值窗口函数:
SELECT DISTINCT A.f1, A.f2, A.f3,
FIRST_VALUE(B.VAL) OVER (PARTITION BY COALESCE(B.f1, B.f2) ORDER BY "date" DESC) VAL,
MAX(B."date") OVER (PARTITION BY COALESCE(B.f1, B.f2)) "date"
FROM A INNER JOIN B
ON A.f1 = COALESCE(B.f1, B.f2)
请参阅。您可以使用最大值和第一值窗口功能:
SELECT DISTINCT A.f1, A.f2, A.f3,
FIRST_VALUE(B.VAL) OVER (PARTITION BY COALESCE(B.f1, B.f2) ORDER BY "date" DESC) VAL,
MAX(B."date") OVER (PARTITION BY COALESCE(B.f1, B.f2)) "date"
FROM A INNER JOIN B
ON A.f1 = COALESCE(B.f1, B.f2)
请参阅。确定日期值吗?确定日期值吗?