J'ai le problème suivant. J'ai une database SQL Server avec deux tables.
La première table contient les colonnes PositionName
, date
et AnimalName
, et la deuxième table contient les colonnes Weight
, date
et AnimalName
Maintenant, parce qu'un animal se déplace et que j'ai besoin d'évaluer ces rangées de données, je stocke chaque nouvelle position ou chaque nouveau poids comme une nouvelle rangée.
Mais maintenant je veux connaître la position actuelle de l'animal et son poids actuel. comment puis-je gérer cela?
Exemple de données
Position de la table
A, 23.02.2015, ABC B, 28.02.2015, ABC
Poids de la table
A, 3.09, 22.02.2015, ABC B, 2.3, 23.03.2015, ABC
Ce que je veux c'est ça
Table WeightPosition
Name Weight Position ABC 2.3 B
Essayer:
select p.animalname, w.weight, p.positionname from position p join weight w on p.animalname = w.animalname where p.dt = (select max(x.dt) from position x where x.animalname = p.animalname) and w.dt = (select max(x.dt) from weight x where x.animalname = w.animalname)
(changez les noms des champs si nécessaire)
Test de violon: http://sqlfiddle.com/#!6/31358/1/0
Essaye ça:
SELECT an.AnimalName, w.Weight, p.Position FROM (SELECT AnimalName FROM Positions UNION SELECT AnimalName FROM Weights) an OUTER APPLY(SELECT TOP 1 Weight FROM Weights where AnimalName = an.AnimalName ORDER BY Date desc) w OUTER APPLY(SELECT TOP 1 Position FROM Positions where AnimalName = an.AnimalName ORDER BY Date desc) p