【问题标题】:Inner Join BETWEEN two values两个值之间的内连接
【发布时间】:2025-12-23 15:25:10
【问题描述】:

我目前正在尝试填充我的事实表,但在填充所需的时间 ID 时遇到了问题。时间维度已完全填充且完整。基本上在时间维度上,每一行是一个 15 分钟的周期。事实表正在填充有关调用的详细信息。在暂存呼叫表中,我有呼叫的开始和结束时间。

我想通过在时间开始时加入临时表上的维度来填充事实表,并且当维度中的 time_Start 介于临时的开始时间和结束时间之间时。我已经运行了下面的查询使用 = 运算符,但它似乎不起作用,当我应该期待更多像 4000 时只拉出 100 行。我可以使用 BETWEEN 代替 = 吗?

INNER JOIN Time_Dim ON incoming_measure.StartTimeDate = Time_Start
WHERE Time_Start BETWEEN incoming_measure.StartTimeDate AND incoming_measure.EndTimeDate

感谢您的帮助。

【问题讨论】:

  • 你试过了吗?你遇到了什么错误?
  • 我没有收到任何错误,它运行的问题是行数,如果理论上将数据拆分为 timeID,它会降低我的行数,它应该增加数量而不是减少

标签: sql-server join operators inner-join


【解决方案1】:

编辑:

您的加入不正确。您的加入格式应为:

Select column from table A
INNER JOIN table b on
    A.column = B.column
INNER JOIN table c on
    B.column = c.column
Where B.column Between start_date AND end_date

您可以使用<> 运算符

另外,对于sqlserver,使用yyyy-mm-dd 格式很重要

INNER JOIN Time_Dim ON incoming_measure.StartTimeDate = Time_Start
WHERE Time_Start > incoming_measure.StartTimeDate AND Time_Start < incoming_measure.EndTimeDate

你也可以使用Between

INNER JOIN Time_Dim ON incoming_measure.StartTimeDate = Time_Start
WHERE Time_Start Between incoming_measure.StartTimeDate AND incoming_measure.EndTimeDate

【讨论】:

  • 您好,谢谢您,由于某种原因,*解决方案根本没有返回任何行,而我一直在使用介于两者之间的行。连接总是必须是 = 还是可以是 BETWEEN?
  • @RichardC 查看我的最新编辑,我认为您的 join 语法不正确
  • 为此欢呼是有道理的。 1 件事,我有 4 个内部连接,我是否将所有连接一个接一个地放置,然后将所有 WHERE 和放在最后?
  • @RichardC 是的,这是正确的。我更新了答案以展示它的外观
  • 嗨,谢谢,是这样,仍然产生与以前相同的行数