找出两个结果的并集,其中一个条目将在特定条件下出现,而一个条目将不存在于条件下但作为最后记录可用。当前关于标准的数据的联合,并且作为不等于标准的最新记录可用。
结果应仅来自表B。
我有以下两个表:
表A(仅供参考):
id | key
---------
1 | 1
2 | 2
3 | 3
4 | 4
5 | 5
6 | 6
7 | 7
8 | 8
9 | 9
10 | 10
表B:
id | balance | startDate | tableIdA
------------------------------------
1 | 2300 | 2019-12-26 | 4
2 | 23023 | 2019-12-26 | 2
3 | 23034 | 2019-12-26 | 5
4 | 2303 | 2019-12-26 | 6
5 | 2332 | 2019-12-26 | 7
6 | 2655 | 2019-12-26 | 8
7 | 2332 | 2019-11-30 | 10
8 | 2352 | 2019-10-30 | 9
9 | 2300 | 2019-12-25 | 4
10 | 2300 | 2019-12-24 | 4
11 | 2700 | 2019-11-30 | 1
12 | 2352 | 2019-10-29 | 9
13 | 2332 | 2019-11-29 | 10
14 | 2332 | 2019-11-29 | 3
假设我需要两个集合的并集:
查询输入将启动日期并列出
startDate = '2019-12-26'
list = "1,2,3,4,5,6,7,8,9,10)
第一组将startDate = 2019-12-26和in (1,2,3,5,6,7,8,9,10)
第二组记录将不可用startDate = 2019-12-26(可能会出现在小于'2019-12-26'的位置)并出现在列表中(1,2,3,4,5,6,7,8,9,10)
输出将是:
id | balance | startDate | tableIdA
------------------------------------
1 | 2300 | 2019-12-26 | 4
2 | 23023 | 2019-12-26 | 2
3 | 23034 | 2019-12-26 | 5
4 | 2303 | 2019-12-26 | 6
5 | 2332 | 2019-12-26 | 7
6 | 2655 | 2019-12-26 | 8
7 | 2332 | 2019-11-30 | 10
8 | 2352 | 2019-10-30 | 9
11 | 2700 | 2019-11-30 | 1
14 | 2332 | 2019-11-29 | 3
注意事项:
一个结果将是
select * from tableb where startDate = '2019-12-26' and tableIdA in (1,2,3,4,5,6,7,8,9,10)
这将给6记录。
剩余的4条记录将获得最后一条记录,这意味着tableIdA = 10的示例有两条记录可用。结果将是'2019-11-30'日期记录。
像其他人一样明智。
对于tableIdA = 3,9,1,仅找到一条记录。总计将是4条记录。
然后我们必须合并到结果集。
这是你想要的吗?
select tb.*
from tableb tb
inner join tablea ta on ta.id = tb.tableIdA
where
ta.key in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
and tb.startDate = (
select min(tb1.startDate)
from tableb tb1
inner join tablea ta1 on ta1.id = tb1.tableIdA
where tb1.startDate >= '2019-12-26' and ta1.key = ta.key
)
order by startDate
此查询为您提供key第一条startDate等于或大于参数日期的可用记录。
没有tablea:
select tb.*
from tableb tb
where
tb.tableIdA in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
and tb.startDate = (
select min(tb1.startDate)
from tableb tb1
where tb1.startDate >= '2019-12-26' and tb1.tableIdA = tb.tableIdA
)
order by startDate
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。