如何在日期列上查询 2 个表,如果不存在匹配的日期,那么我们必须加入下一个最大日期

Posted

技术标签:

【中文标题】如何在日期列上查询 2 个表,如果不存在匹配的日期,那么我们必须加入下一个最大日期【英文标题】:How to query 2 tables on a date column ,if matching date doesn't exist then we have to join with next maximum date 【发布时间】:2020-09-29 19:31:02 【问题描述】:

我有 2 个如下表

表 1

id   DOB         name
1   01/01/1990   victor
2   01/01/1991   deb
3   01/01/1992   Mat

表 2

id   Date         amount
1   01/01/1990    100
2   12/11/1990    700
2   12/30/1990    455
2   01/02/2014      7000
3   12/30/1991    800
3   06/22/1991    332

我想要输出如下

id   DOB         name.    amount
1   01/01/1990   victor   100
2   01/01/1991   deb      455
3   01/01/1992   Mat      800

我们必须加入 table1 中的 id 列和 DOB 列以及 table2 中的 date 列。如果日期不匹配,那么我们必须加入下一个最大日期列

提前致谢

【问题讨论】:

“下一个最大日期”是什么意思? - 对于 deb - 什么应该是正确的数据?会是7000吗? 【参考方案1】:

您可以使用以下查询 - 我假设,如果 dob 与日期列不匹配,我们应该选择与最大日期相关的金额。请澄清一下,以便我可以相应地更改 sql。

select id, dob, name, amount 
from
(select a.id,a,dob,a.name,b.amount,b.date,
row_number() over(partition by a.id order by a.id ,b.date desc) rn
from
table1 a
left join table2 b on a.id = b.id ) rs
where case when date = dob then 1 else rs.rn end=1
 

【讨论】:

以上是关于如何在日期列上查询 2 个表,如果不存在匹配的日期,那么我们必须加入下一个最大日期的主要内容,如果未能解决你的问题,请参考以下文章

发现 2 个表之间不匹配记录的最快方法是啥?

mysql 在 2 个表上查询总和

搜索查询加入 3 个表,1 个表有日期

Oracle查询计算与日期数组完全相同的匹配

Pandas 在日期列上重新采样

有关给定日期的sql查询,如果不存在,请提供最新日期