首页 > 解决方案 > SQL - 检查项目在上个月是否可用,然后标记它

问题描述

我正在尝试解决 SQL 中的一个问题,但到目前为止还没有取得多大成功。我有一张这样的桌子:

OWNER|STORE|DATE
  A  | MIX |01/01/2019
  A  | BIX |01/01/2019
  A  | BIX |02/01/2019
  B  | CIX |01/01/2019
  B  | CIX |02/01/2019

这是一个表格,显示有关所有者及其商店的信息。所有者可以在一个月内拥有一家商店,但该商店可能会在下个月消失。或者,他们的商店可能在一月份出现,但在二月份就消失了。

我想找到一种方法来标记这个商店运动,所以如果一家商店在一月份存在,二月份就消失了,我会将一个列标记为“消失”。如果一家商店在一月份没有出现,但在二月份出现了,我会将其标记为“新”。

任何人都可以帮助我吗?谢谢!

标签: sqlhanasql-scriptshana-sql-script

解决方案


使用lag()lead()

select t.*,
       (case when prev_date < add_months(date, -1) or
                  prev_date is null
             then 'new'
             when next_date > add_months(date, 1) or
                  next_date is null
             then 'gone'
        end) as flag
from (select t.*,
             lag(date) over (partition by owner, store order by date) as prev_date,
             lead(date) over (partition by owner, store order by date) as lead_date
      from t
     ) t;

推荐阅读