mysql - 连接两个具有日期范围的表

标签 mysql sql-server

我有两个包含开始日期和结束日期的 SQL 表。

 Table 1: Name, AddedDate
 Table 2: Name, RemovedDate

我希望连接这两个表并将数据转储到一个临时表中,以显示何时从列表中添加和删除名称。

The same name may have been added and removed multiple times.

期望的输出示例

- Name, AddedDate, RemovedDate
- Jane, 2017-02-01, 2017-02-03
- Bill, 2017-01-28, (blank)
- Mike, 2017-01-15, 2017-01-19
- Jane, 2017-01-13, 2017-01-14

有人可以帮忙吗?谢谢。

最佳答案

另一个选项是OUTER APPLY(如果是 SQL Server)

示例

Declare @Table1 table (Name varchar(25),AddedDate date)
Insert Into @Table1 Values
('Jane', '2017-02-01'),
('Bill', '2017-01-28'),
('Mike', '2017-01-15'),
('Jane', '2017-01-13')

Declare @Table2 table (Name varchar(25),RemovedDate date)
Insert Into @Table2 Values
('Jane', '2017-02-03'),
('Mike', '2017-01-19'),
('Jane', '2017-01-14')


Select A.Name
      ,A.AddedDate
      ,B.RemovedDate
 From  @Table1 A
 Outer Apply (
                Select RemovedDate=min(RemovedDate)
                 From  @Table2
                 Where Name=A.Name
                  and  RemovedDate>=A.AddedDate
             ) B

返回

Name    AddedDate   RemovedDate
Jane    2017-02-01  2017-02-03
Bill    2017-01-28  NULL
Mike    2017-01-15  2017-01-19
Jane    2017-01-13  2017-01-14

关于mysql - 连接两个具有日期范围的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43005333/

相关文章:

sql-server - 如何撤消 sp_addlinkedserver abc ,'SQL Server' ?

c# - EF Core 到 Mysql 表绑定(bind)

c# - 如何找到由下划线限定的 5 个数字组成的变量集?

mysql逻辑来统计

mysql - 在 MySQL 中存储不同格式的数字

sql - sys.fn_dblog 的开始和结束 LSN 参数应该是什么格式?

.net - 如何确定 SQL Server 存储过程参数是否有默认值?

SQL Server 中的 MySQL 准备语句等效项

基于单元格内容从 EXCEL VBA 进行 MYSQL 查询

php - MySQL 查询在测试机器上运行正常,但在 ISP 服务器上失败