具有最新位置和权重的SQL

时间:2015-03-07 21:01:31

标签: sql sql-server sql-server-2008

我有以下问题。我有一个带有两个表的SQL Server数据库。

第一个表包含PositionNamedateAnimalName列,第二个表包含WeightdateAnimalName <列/ p>

现在因为动物四处移动而我需要评估这些数据行,我将每个新位置或每个新重量存储为新行。

但现在我想得到动物的当前位置和它已经获得的当前体重。我怎么处理这个?

示例数据

表位

A, 23.02.2015, ABC
B, 28.02.2015, ABC

表重量

A, 3.09, 22.02.2015, ABC
B, 2.3, 23.03.2015, ABC

我想要的是这个

表WeightPosition

Name   Weight   Position
ABC      2.3       B

2 个答案:

答案 0 :(得分:1)

尝试:

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)

(根据需要更改字段名称)

小提琴测试: http://sqlfiddle.com/#!6/31358/1/0

答案 1 :(得分:0)

试试这个:

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