我的下面的代码工作正常。它所做的是它将更新每个产品编号,当它移动到新位置有没有更好的方法来检索这些数据?
select
a.loc1 As [Location 1],
b.loc2 as [Location 2],
c.loc3 as [Location 3],
d.loc4 as [Location 4]
FROM (select distinct a.ProductNR as Loc1
from LocationsTest a
where a.Date= (select max(Date) from LocationsTest where a.ProductNR = ProductNR)
AND a.Location = 1) as a
FULL OUTER JOIN
(select distinct a.ProductNR as Loc2
from LocationsTest a
where a.Date= (select max(Date) from LocationsTest where a.ProductNR = ProductNR)
AND a.Location = 2) as b
on a.Loc1 = b.Loc2
FULL OUTER JOIN
(select distinct a.ProductNR as Loc3
from LocationsTest a
where a.Date= (select max(Date) from LocationsTest where a.ProductNR = ProductNR)
AND a.Location = 3) as c
ON ISNULL(A.Loc1, b.Loc2) = c.Loc3
FULL OUTER JOIN
(select distinct a.ProductNR as Loc4
from LocationsTest a
where a.Date= (select max(Date) from LocationsTest where a.ProductNR = ProductNR)
AND a.Location = 4) as d
ON ISNULL(b.Loc2, c.Loc3) = d.Loc4
一个例子来说明它如何工作,是因为你可以看到在他们不同的产品编号下面的4个地点。
----------------------------------------------------------
| Location 1 | Location 2 | Location 3 | Location 4
----------------------------------------------------------
| 1234 | | | |
| 4567 | | | |
| 8978 | | | |
| 2578 | | | |
----------------------------------------------------------
当一个产品以后获取的扫描到一个新的位置,它仍然会留在我的历史数据,因为它是在位置1,但我上面的查询显示了它这样的:
----------------------------------------------------------
| Location 1 | Location 2 | Location 3 | Location 4
----------------------------------------------------------
| | 1234 | | |
| 4567 | | | |
| 8978 | | | |
| 2578 | | | |
----------------------------------------------------------
它的检索基于上次更新日期的数据。 问题是我上面的代码看起来很长,特别是当我打算在将来添加更多位置时。 那么有更好的方法来做到这一点?
编辑 - 示例数据:
CREATE TABLE LocationsTest
(
ProductNR varchar (14),
Location int,
Date Datetime,
);
Insert Into LocationsTest (ProductNR, Location, Date)
Values('1234', 1, '2016-11-17 12:30:50.010'),
('4567', 1, '2016-11-17 12:35:50.010'),
('8978', 1, '2016-11-17 12:37:50.010'),
('2578', 1, '2016-11-17 12:50:50.010');
请提供源表格和一些数据来填充它们。 – iamdave
这不是真正的表格,它是与我的数据库中几乎相同的表格的一个例子。 你知道我可以上传一些数据的网站吗?像小提琴? – MishMish
@MishMish您是否跟踪产品从一个位置移动到另一个位置?如果有一张表保持一个产品所遍历的所有位置,这将是一个简单的查询。基本上,如果你需要历史数据,你需要跟踪它。 –