验证日期之间的日期退出并根据类型选择特定行
Posted
技术标签:
【中文标题】验证日期之间的日期退出并根据类型选择特定行【英文标题】:Verify the date exits between dates and pick the specific row based on type 【发布时间】:2020-05-29 14:42:31 【问题描述】:表A
id dtchk
1001 3/31/2018
1002 9/30/2018
1004 3/31/2019
1003 5/25/2018
1005 9/30/2019
1006 3/31/2020
表B
id type startdate endate name
1001 1 4/5/2018 12/31/2025 akshi
1002 100 4/27/2015 12/31/2023 polard
1004 100 4/1/2017 12/31/2019 kathi
1003 1 1/25/2018 5/25/2019 smoth
1005 1 3/21/2017 12/31/2020 sumi
1005 100 3/26/2019 12/31/2021 chechi
1006 1 2/28/2019 3/31/2021 paul
1006 100 2/28/2017 3/31/2019 rand
首先我们需要根据 id 验证 dtchk 是否在 startdate 和 endate 之间 如果这些日期之间存在日期,那么我们需要检查类型 如果类型 1 和 100 都适合,则选择类型为 100 的行 如果日期适合这些日期,则按原样选择
输出
id name
1002 polard
1004 kathi
1003 smoth
1005 chechi
1006 paul
【问题讨论】:
您已经告诉我们您的目标,那么您的问题是什么?当您进行尝试时,什么没有奏效? 我厌倦了 cte 与 row_number 函数并左连接,但不太明白。 第一个问题是两个表之间的INNER JOIN,检查dtchk是否在区间内,第二个问题是按照你的规则加入第一行,看看在这里:***.com/questions/2043259/… 尝试解决它,并告诉我们您尝试了什么以及您遇到的问题。 把你的尝试放在问题中,@Quikr。 【参考方案1】:我想你想要apply
:
select a.*, b.*
from a cross apply
(select top (1) with ties b.*
from b
where b.id = a.id and
a.dtchk between b.startdate and b.endate and
b.type in (1, 100)
order by b.type desc
) b;
【讨论】:
当我们应用外部应用时它有什么不同,我会从表 b 中得到不匹配的值作为空值吗?这就是我所看到的,但只是想了解外部应用是如何工作的 Gordo 对不起,我没有意识到点击了两次,这是错误的。答案绝对有用 @Quikr 。 . .OUTER APPLY
将保留 a
中的所有行,即使没有匹配项。以上是关于验证日期之间的日期退出并根据类型选择特定行的主要内容,如果未能解决你的问题,请参考以下文章