我似乎在任何地方都找不到这个简单的事实。
我在 SQL Server 中有一个类似的事实表。
fact_picked
Emp_Name Date Apples_Picked
John May 1 17 100
还有一个像这样的二维表
dim_company
Emp_Name Company Effective_Since
John Blue_Apples June 1 2015
John Apple_N_Stuff Jan 1 2016
John Da_Big_Apple March 17 2017
John Big_Tech October 20 2017
我如何将事实加入维度表,以便知道哪个“公司”挑选了 100 个苹果?
在这种情况下,从逻辑上讲,鉴于数据,它是“Da_Big_Apple”……因为 John 于 3 月 17 日开始在那里工作,直到 2017 年 10 月,他的苹果采摘任务就发生了。
我如何连接这些表呢?(假设有数千条记录)。
我只是卡住了。我知道我应该做类似的事情
Select fp.emp_name, fp.date, fp.apples_picked
from fact_picked fp
left join dim_company dc
on fp.emp_name = dc.emp_name
and fp.date > dc.effective_since .... ???
我想我不太确定。我想我可以使用视图将类型 2 转换为类型 4(表中有结束日期)。然后就更简单了。确保事实日期大于开始日期,但在结束日期之前。但这是最优雅的解决方案吗?
设置一些示例数据:
建议的解决方案:
为了确保
left join
正常工作,假设我们在 dim_company 表中只有以下行:再次运行建议的查询:
这是上面的一个dbfiddle。