SQL在DateTime上加入相同的表,比较今天和之前的条目

时间:2015-02-26 11:31:18

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

我有一张表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

我想要实现的是使用UpcCodeStoreID 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,但我只能在今天和昨天进行比较,但这种情况是不可能的

由于

1 个答案:

答案 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;