sql - 还包括此表中与 sql 中另一个表上的条件匹配的记录
问题描述
我在这些行中有表格:
A:
id param_1 param_2 status dateUpdated
-----------------------------------------------
1 valuea valueb Active 2018-10-02
2 valuec valued Inactive 2018-09-03
3 valuee valuef Active 2018-10-01
4 valueg valueh Active 2017-01-20
5 value1 value2 Active 2018-03-03
6 value3 value4 Active 2016-10-21
...
乙:
id a_id some_param dateModified
-------------------------------------
1 3 x 2018-10-04
2 2 y 2018-06-30
3 4 aa 2018-10-01
...
99 6 ab 2018-01-16
100 3 z 2018-04-08
我想要在A
某个日期之后更新的记录,但还包括与另一个表中的日期条件匹配的其他记录(如果不存在,否则返回最新日期)B
。
如果只有表A
:
select id,
param_1,
param_2,
dateUpdated
from A
where status = 'Active'
and dateUpdated between @someDate and @someAnotherDate
现在加入:
select distinct A.id,
A.param_1,
A.param_2,
A.dateUpdated -- or B.dateModified, whichever is latest if that's even possible
from A
join B on B.a_id = A.id
where A.status = 'Active'
and ((A.dateUpdated between @someDate and @someAnotherDate) || (B.dateModified between @someDate and @someAnotherDate))
所以从上面说someDate = '2018-10-01'
,someAnotherDate = '2018-10-04'
我会得到结果:
id, param_1 param_2 dateUpdated
------------------------------------
1 valuea valueb 2018-10-02
3 valuee valuef 2018-10-04
4 valueg valueh 2018-10-01
解决方案
从B
您想要每个给定范围内的最大日期a_id
。将此结果外连接到A
并用于CASE WHEN
获取较新的日期。
select
a.id,
a.param_1,
a.param_2,
a.status,
case when bmax.max_date > a.dateUpdated then bmax.max_date else a.dateUpdated as updated
from a
left join
(
select a_id, max(dateModified) as max_date
from b
where dateModified between @someDate and @someAnotherDate
group by a_id
) bmax on bmax.a_id = a.id
where a.status = 'Active'
and
(
a.dateUpdated between @someDate and @someAnotherDate
or
bmax.dateModified between @someDate and @someAnotherDate
)
order by a.id;
推荐阅读
- jquery - 如何从动态加载的选项中禁用选定的选项
- c# - Dockerfile 使用适用于 Windows 10 和 sdk 3.0 的 Powershell 构建错误
- php - Laravel 雄辩的 with() 返回 null
- python - 如何在 tkinter 中创建一个条目 int
- google-chrome - 打开单个 Chrome 选项卡会导致多个远程连接
- bash - UNIX:条件检查导致意外结果
- json - 使用 CLI 从 Windows 系统中的 AWS S3 存储桶将 JSON 文件复制到本地
- python - 适用于 Apple 环境的 Python 脚本
- autocomplete - 如何使用 Gmail API 在我的项目中实现 Gmail 智能撰写功能?
- python - 表单提交后页面不重定向