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
我想要实现的是将 StoreID
的 UpcCode
与其之前使用 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;
我有一个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
我想要实现的是将 StoreID
的 UpcCode
与其之前使用 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;