SQL 加入日期范围

Posted

技术标签:

【中文标题】SQL 加入日期范围【英文标题】:SQl join on date range 【发布时间】:2017-04-27 16:17:38 【问题描述】:

我有一张桌子

ID, Start Date, End Date

我有第二张表,其中有一列,日期从 2000 年到 2050 年。它是连接开始和结束日期的关键 日期_ID

我想坐一张这样开始的桌子

ID, Start Date, End Date
123, 1/1/2017,  1/5/2017

然后将它加入到日期表(第二个表)上,输出一个这样的表

ID, Start Date, End Date, Day Date
123, 1/1/2017,  1/5/2017, 1/1/2017
123, 1/1/2017,  1/5/2017, 1/2/2017
123, 1/1/2017,  1/5/2017, 1/3/2017
123, 1/1/2017,  1/5/2017, 1/4/2017
123, 1/1/2017,  1/5/2017, 1/5/2017

我想在某个日期范围内加入,但这不起作用。任何帮助/建议将不胜感激!我正在使用 mysql

SELECT 
    name,
    date(start_date),
    date(end_date),
    d.id as Day_Date
FROM
    f_table1 a
Left Join
    d_table2 d on d.id = d.id between date(a.start_date) and date(a.end_date)

上面的代码当然不会运行,但这是我迄今为止最好的尝试。

【问题讨论】:

不确定您的 table2 是什么。向我们展示两个表和预期输出的样本数据。请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 【参考方案1】:
SELECT 
    name,
    date(start_date),
    date(end_date),
    d.id as Day_Date
FROM       f_table1 a
Left Join  d_table2 d 
    on a.id = d.id 
   and d.`Day Date` between date(a.start_date) and date(a.end_date)

【讨论】:

这个可以再详细解释一下吗?如果它在开始日期和结束日期之间,您将加入 id 本身。为什么会这样? @Ritz735 这是原始问题的错字,我只是复制并粘贴。从 OP 来看,唯一的问题是他缺少 ON 子句的 AND。所以我真的不需要理解这个问题,因为它只是解决一个错字。如果您有类似的问题,请尝试提出一个新问题。【参考方案2】:

试试下面的查询:

选择 姓名, 日期(开始日期), 日期(结束日期), d.id 作为 Day_Date 从 f_table1 一个 正确加入 d_table2 d on d.id 在 date(a.start_date) 和 date(a.end_date) 之间

【讨论】:

以上是关于SQL 加入日期范围的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Hive SQL 中按日期范围独家加入?

SQL Server 成员资格日期范围

日期范围内的 Oracle sql 内部联接

加入带有日期范围的熊猫时间序列

我如何查询给定日期范围的mysql并加入两个表?

如何将单个日期列加入时间范围表