开发者社区> 问答> 正文

从同一张表中找出具有不同条件的两个不同结果的并集[关闭]

找出两个结果的并集,其中一个条目将在特定条件下出现,而一个条目将不存在于条件下但作为最后记录可用。当前关于标准的数据的联合,并且作为不等于标准的最新记录可用。

结果应仅来自表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条记录。

然后我们必须合并到结果集。

展开
收起
几许相思几点泪 2019-12-26 20:07:51 940 0
1 条回答
写回答
取消 提交回答
  • 这是你想要的吗?

    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
    
    2019-12-26 20:08:17
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载