我有一张表跟踪库存变化,其中包含以下字段:
InvNo int
InStock int
AdjustedOn datetime
我正在尝试编写一个查询,该查询将返回不同的InvNo值,其中最近的InStock值比给定InvNo的最后一个InStock值大至少10个。
我也试图写一个类似的查询来做同样的事情,但是对于InvNo,其中任何InStock值比前一个值大10 /小。
我之前已经这样做了,我知道这并不复杂,但是在今天早上记得如何在合理的时间内完成它时会遇到一些麻烦。
编辑:表格中没有Id字段,但如果可以使查询更容易,我可以添加一个。
答案 0 :(得分:1)
你必须做一个自我连接,在sql查询中包含最新的行以及当前的行......
Select c.InvNo, c.inStock current, r.InStock Previous
From table c join table r
on r.invNo = c.invNo
And r.AdjustedOn =
(Select Max(AdjustedOn)
From table
Where invNo = c.InvNo
And adjustedOn < c.AdjustedOn)
Where c.InStock >= r.Instock + 10 Or
c.Instock <= r.Instock - 10
这为您提供了该时间点的更改的所有行,与之前的更改相比为10或更多,但它包括过去在最近更改之前发生的更改。如果您希望查询仅包含表示最新更改的行,则将另一个谓词子查询添加到外部sql ...
Select c.InvNo, c.inStock current, r.InStock Previous
From table c join table r
on r.invNo = c.invNo
And r.AdjustedOn =
(Select Max(AdjustedOn)
From table
Where invNo = c.InvNo
And adjustedOn < c.AdjustedOn)
Where (c.InStock >= r.Instock + 10 Or
c.Instock <= r.Instock - 10)
And c.AdjustedOn =
(Select Max(AdjustedOn)
From table
Where invNo = c.InvNo)
答案 1 :(得分:1)
什么版本的SQL?