使用滞后功能

时间:2017-10-24 16:01:20

标签: sql

我目前的数据是2016年的客户数据。但我想知道客户是否在2016年之前有记录。

select ID,
       name, 
       date_enter,
       Date_leave,
       item_bought,
       lastitmebought =Lag(ID, 1) OVER (PARTITION BY Name ORDER BY Name , Date_leave)
from Customer 
where date between '01/01/2016' and '12/31/2016'

我知道我的查询仅仅是关注2016年的客户。 以下是我想要做的一个例子:如果客户A在2016年1月1日进入并且之前已经在商店11月25日,我希望我的滞后能够给出我2015年记录的ID,不仅仅是2016年的记录。

谢谢

1 个答案:

答案 0 :(得分:0)

如果您想知道客户在2016年之前是否有记录,我建议汇总:

select c.id
from Customer c
group by c.id
having min(date_enter) < '2016-01-01';

如果您想要2016年和2015年的客户ID:

select c.id
from Customer c
group by c.id
having max(date_enter) >= '2016-01-01' and
       sum(case when date_enter >= '2015-01-01' and date_enter < '2016-01-01' then 1 else 0 end) > 0;