我有一张表Info
收集数据。
DOEntry | StoreID | UpcCode | QN | DTOEntry
26-02-15 | 3 | 366 | 16 | 2-26-15 12:21 PM
26-02-15 | 3 | 373 | 8 | 2-26-15 12:21 PM
25-02-15 | 3 | 366 | 16 | 2-25-15 1:34 PM
25-02-15 | 3 | 373 | 6 | 2-25-15 1:34 PM
23-02-15 | 3 | 366 | 2 | 2-23-15 1:51 PM
23-02-15 | 3 | 373 | 12 | 2-23-15 1:51 PM
19-02-15 | 3 | 366 | 14 | 2-19-15 12:41 PM
19-02-15 | 3 | 373 | 10 | 2-19-15 12:41 PM
18-02-15 | 3 | 366 | 16 | 2-18-15 12:17 PM
18-02-15 | 3 | 373 | 6 | 2-18-15 12:17 PM
17-02-15 | 3 | 366 | 26 | 2-17-15 12:18 PM
17-02-15 | 3 | 373 | 6 | 2-17-15 12:18 PM
我想要实现的是使用UpcCode
将StoreID
DTOEntry
与之前的记录进行比较。为了获得新的QN
,它之前的QN
(昨天没有必要,例如。24-02-15
不存在
期望的输出
DOEntry_new| StoreID | UpcCode | QN_new | QN_previous
26-02-15 | 3 | 366 | 16 | 16
26-02-15 | 3 | 373 | 8 | 6
25-02-15 | 3 | 366 | 16 | 2
25-02-15 | 3 | 373 | 6 | 12
23-02-15 | 3 | 366 | 2 | 14
23-02-15 | 3 | 373 | 12 | 10
19-02-15 | 3 | 366 | 14 | 16
19-02-15 | 3 | 373 | 10 | 6
任何人都可以建议这是可能的。我试过了inner join
,但我只能在今天和昨天进行比较,但这种情况是不可能的
由于
答案 0 :(得分:4)
在SQL Server 2012+中,您可以使用lag()
。在SQL Server 2008中,最合理的方式是相关子查询或apply
。这是一个例子:
select i.*, p.qn as qn_previous
from info i cross apply
(select top 1 i2.*
from info i2
where i2.storeid = i.storeid and i2.upcode = i.upcode and
i2.doentry < i.doentry
order by i2.doentry desc
) p;