我的表看起来像这样:
ID snapshotDate Item ItemCode
-- ------------ ----- -----
1 2015-11-01 Item1 11
2 2016-04-01 Item2 22
3 2016-04-01 Item3 33
4 2016-06-01 Item4 44
5 2016-09-01 Item3 33
6 2016-08-01 Item5 55
7 2016-09-01 Item4 44
8 2017-01-10 Item6 66
9 2017-01-10 Item4 44
首先,我想确定最后 2 个快照日期,结果应该是:
2016-09-01 -- 我要称之为 (当前快照日期)
2017-01-10 -- 我要叫这个 (上一个快照日期)
然后我想选择具有当前快照日期的项目,并且它们具有以前的快照日期。它应如下所示:
ID snapshotDate Item ItemCode
-- ------------ ----- -----
7 2016-09-01 Item4 44
9 2017-01-10 Item4 44
这样的事情应该可以工作:
declare @curr date, @prev date
select @curr = max(snapshotdate), @prev = min(snapshotdate)
from
(
select distinct top 2 snapshotdate from Table1 order by snapshotdate desc
) X
select * from Table1
where snapshotdate in (@curr, @prev)
and item in (
-- select items that have row in both snapshotdates
select item from Table1
where snapshotdate in (@curr, @prev)
group by item
having count(*) = 2
)
但是,您的示例不正确,只有 Item4 在最新和上一个快照中有行。