Sql 用填充字段的最大日期连接两个表

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

我有一个场景,我应该通过将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) 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)

请参阅。

确定日期值吗?确定日期值吗?