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

SQL Join same table on DateTime comparing Today and a previous entry

我有一个tableInfo收集数据。

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

我想要实现的是将 StoreIDUpcCode 与其之前使用 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 但我只能比较今天和昨天,但这种情况是不可能的

谢谢

在SQLServer 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;