确定最后 2 个快照日期并选择具有当前快照日期的项目以及具有上一个快照日期的项目



我的表看起来像这样:

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 在最新和上一个快照中有行。

最新更新