Eu não consigo encontrar este simples fato em qualquer lugar.
Eu tenho uma tabela de fatos como tal no SQL Server.
fact_picked
Emp_Name Date Apples_Picked
John May 1 17 100
E uma tabela de dimensão tipo 2 como esta
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
Como juntaria o fato à tabela de dimensões para saber qual "empresa" colheu as 100 maçãs?
Nesse caso, logicamente, dados os dados, é 'Da_Big_Apple' ... desde que John começou a trabalhar lá em 17 de março até outubro de 2017, em que sua tarefa de colheita de maçãs ocorreu.
Como faço para fazer uma junção dessas tabelas? (assumindo milhares de registros).
Eu só fico preso. Eu sei que deveria fazer algo como
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 .... ???
Acho que não tenho certeza. Acho que posso usar uma visão para converter o tipo 2 em um tipo 4 (com uma data de término na tabela). Então é mais simples. Certifique-se de que a data do fato seja maior que a data de início, mas antes da data de término. Mas essa é a solução mais elegante?
Configure alguns dados de exemplo:
Solução proposta:
Para ter certeza de que
left join
está funcionando corretamente, suponha que temos apenas as seguintes linhas na tabela dim_company:Execute a consulta proposta novamente:
E aqui está um dbfiddle para o acima.