基于日期范围连接表

Posted

技术标签:

【中文标题】基于日期范围连接表【英文标题】:Joining Tables based on Date Ranges 【发布时间】:2016-04-20 06:19:08 【问题描述】:

我有一个 MS Access 问题

我一直在努力处理包含日期范围连接的查询。 找到了几个关闭的帖子,但没有得到它的工作

我有两张桌子。 一个包含一些数据和截止日期。

Table A 
Field 1, Field 2, Field 3, Due Date

另一个表包含关于一个时期的信息。

Table B
Periodname, Field X/Y/Z, StartDate, EndDate

我尝试使用此输出进行查询

Field 1, Field 2, Due Date, Periodname

希望你能帮忙。

【问题讨论】:

【参考方案1】:

在 MsAccess 中,您实际上可以使用 <> 编写连接语句,尽管您无法在查询编辑器中显示它。

SELECT [Field 1], [Field 2], [Field 3], [Due Date], PeriodName
FROM A INNER JOIN B ON A.[Due Date] >= B.StartDate AND A.DueDate <= B.EndDate

【讨论】:

【参考方案2】:

您可以通过 where 子句“加入”:

Select
    Field1, 
    Field2, 
    DueDate, 
    Periodname
From
    TableA,
    TableB
Where
    DueDate Between StartDate And EndDate

【讨论】:

我设法让它与 Where, 显然问题是我只从与表 B 匹配的表 A 中获取记录。【参考方案3】:

这是我到目前为止创建的 但是我在“Between”命令中遇到错误。 "你使用了运算符 'Between' 而没有 'And'

SELECT Left([Q_Epics].[Component/s],3) AS Proj_Nr, Mid([Q_Epics].[Component/s],6,35) AS Project, Q_Epics.[Epic Key], Q_Epics.Summary , Q_Epics.Labels, Q_Epics.[截止日期], Sprints.Sprint AS Sprint

来自 Q_Epics

在 Q_Epics 上左加入 Sprints。[Due Date] 在 [Sprints].[StartSprint] 和 [Sprints].[EindeSprint] 之间

GROUP BY Left([Q_Epics].[Component/s],3), Mid([Q_Epics].[Component/s],6,35), Q_Epics.[Epic Key], Q_Epics.Summary, Q_Epics。标签,Q_Epics.[到期日期],Q_Epics.EpicStatus

有(((Q_Epics.EpicStatus)“已关闭”))

按 Q_Epics 订购。[截止日期];

【讨论】:

【参考方案4】:

在这个版本中,错误是: 您尝试运行一个查询,其中 expressin 'Sprints.Sprint' 不是静态函数的一部分

SELECT Left([Q_Epics].[Component/s],3) AS Proj_Nr, Mid([Q_Epics].[Component/s],6,35) AS Project, Q_Epics.[Epic Key], Q_Epics.Summary , Q_Epics.Labels, Q_Epics.[截止日期], Sprints.Sprint

来自 Q_Epics

Q_Epics.[Due Date] >= [Sprints].[StartSprint] AND Q_Epics.[Due Date]

GROUP BY Left([Q_Epics].[Component/s],3), Mid([Q_Epics].[Component/s],6,35), Q_Epics.[Epic Key], Q_Epics.Summary, Q_Epics。标签,Q_Epics.[截止日期],Q_Epics.EpicStatus

有(((Q_Epics.EpicStatus)“已关闭”))

按 Q_Epics 订购。[截止日期];

【讨论】:

请使用Add comment 按钮而不是发布您的 cmets 作为答案 实际上请在您的问题上使用“编辑”在此处添加新代码。【参考方案5】:

完成。 结合你的答案!!谢谢

SELECT Left([Q_Epics].[Component/s],3) AS Proj_Nr, Mid([Q_Epics].[Component/s],6,35) AS Project, Q_Epics.[Epic Key] AS [Epic Key ],Q_Epics.Summary AS 摘要,Q_Epics.Labels AS 标签,Q_Epics.[Due Date] AS [Due Date],[Sprints].[Sprint] AS Sprint

来自 Q_Epics

LEFT JOIN Sprints ON (Q_Epics.[Due Date] >= [Sprints].[StartSprint]) AND (Q_Epics.[Due Date]

WHERE (((Q_Epics.EpicStatus)"已关闭"))

按 Q_Epics 订购。[截止日期];

【讨论】:

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

日期范围的SQL连接计数到日历日期表?

使用范围内的日期来连接和显示所有日期?

在 oracle SQL 中基于重叠日期范围连接客户端记录

mysql使用内部连接根据数据库中的日期范围显示数据

Mysql - 使用多个连接表查找丢失的日期

右表中空结果的内连接