Eu tenho três tabelas assim:
Caminhos de mesa:
Esta tabela salva as informações do corredor e o comprimento de milhas
ID|Name|BMP |EMP |Vendor
1 |Alex|12.25|22.25|Heinz
2 |Abby|0.00 |3.55 |Uni
3 |Marx|5.55 |10.55|Jam
Tabela RaceDetails: Esta tabela salva a direção (a maioria das corridas tem para cima e para baixo, caso em que o intervalo muda)
ID|Dir|BMP |EMP
1 |U |12.26|12.33
1 |U |12.33|12.47
1 |U |21.12|21.99
1 |U |22.00|22.44
1 |U |22.15|22.36
2 |U |0.00 |2.55
2 |U |2.55 |4.56
2 |D |4.56 |2.55
2 |D |2.55 |0.00
3 |U |5.55 |9.55
3 |U |9.55 |11.69
3 |D |11.69|9.55
3 |D |9.55 |-0.12
Table RaceSense:
ID|BMP |EMP |SENSOR
1 |12.25|20.33|1
1 |20.33|22.25|3
2 |0.00 |3.55 |2
3 |5.55 |9.55 |2
3 |9.55 |10.55|5
Estou fazendo uma junção entre eles assim:
Select distinct *
from Runners a
left join RaceDetails b
on a.ID=b.ID
left join RaceSense c
on a.ID=c.ID
Isso está me dando 22 linhas porque duplica dados de Racedetails devido a várias linhas para o mesmo ID na tabela RaceSense
Eu também tentei isso:
Select distinct *
from Runners a
left join RaceDetails b
on a.ID=b.ID
left join RaceSense c
on a.ID=c.ID
and (b.BMP+b.EMP)/2>=c.BMP
and (b.BMP+b.EMP)/2<=c.EMP
Isso me dá 8 linhas e não 13 porque algumas das médias estão fora do intervalo real da Tabela RaceSense
Eu quero 13 linhas sem duplicação, assim:
ID|Name |BMP |EMP |VENDOR|SENSOR
1 |Alex |12.26|12.33|Heinz |1
1 |Alex |12.33|12.47|Heinz |1
1 |Alex |21.12|21.99|Heinz |3
1 |Alex |22.00|22.44|Heinz |3
1 |Alex |22.15|22.36|Heinz |3
2 |Abby |0.00 |2.55 |Uni |2
2 |Abby |2.55 |4.56 |Uni |2
2 |Abby |4.56 |2.55 |Uni |2
2 |Abby |2.55 |0.00 |Uni |2
3 |Marx |5.55 |9.55 |Jam |2
3 |Marx |9.55 |11.69|Jam |5
3 |Marx |11.69|9.55 |Jam |5
3 |Marx |9.55 |-0.12|Jam |2
A forma que eu quero fazer é:
1. se o BMP e EMP na tabela Detalhes estiverem dentro da tabela Sense BMP e EMP, então isso é bom.
2.Se BMP ou EMP em Detalhes estiver fora da tabela BMP ou EMP em Sense, então pegue a média de BMP e EMP em Detalhes e certifique-se de que esteja dentro do intervalo da tabela Sense.
3. Se o valor médio também estiver fora do intervalo, quero expandir a tabela Sense BMP e EMP em 0,1
4. Caso contrário, dê-me um valor nulo
Alguma ideia?
O processo de upload de dados deve atribuir os valores mínimo e máximo precisos para BMP e EMP na tabela Sense (eles permanecem aproximações). Eu estaria trabalhando no processo de upload para torná-lo mais preciso. No entanto, para colocar esta questão para descansar:
O que fiz para corrigir isso foi encontrar o mínimo e o máximo da tabela Details e atualizar a tabela Sense para corresponder ao intervalo real (como deveria ter sido em primeiro lugar). No entanto, o problema que tive foi que quando eu uso isso:
Se a média for 2,45 e a tabela Sense mostrar dois intervalos como este: 0 a 2,45 e 2,45 a 5 para o mesmo ID, isso me daria uma duplicata. Então, por enquanto, alterei a consulta para isso e funciona:
Se alguém aparecer com uma consulta que funcionaria sem atualizar a tabela a longo prazo. Eu selecionaria essa resposta.