基于sql/hive中的条件比较同一列中的日期

ruarlubt  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(451)

我有一个表,下面的模式。
每个人的id可以有多个代码(a、b、c、d等)。对于每个代码为“a”的人员,将相应日期与该人员可能拥有的所有其他代码的日期进行比较,并筛选出代码为“a”日期后6个月内的日期
所以以第一人称身份号30038590555为例,我想确定代码b和c的日期在a日期的6个月之内。由于两者都高于6个月的阈值,因此应将其过滤掉。

person_id   code    Date
30038590555 B   5/16/2017
30038590555 C   1/9/2019
30038590555 A   1/25/2020
37057397055 A   3/21/2020
38438355555 A   1/25/2020
59385393355 C   7/22/2014
59385393355 A   2/22/2020
44384037555 A   12/21/2019
49384037555 A   3/21/2020
50573409355 D   4/5/2016
50573409355 A   4/6/2016
50573409355 F   4/7/2016
50573409355 G   3/2/2017
50573409355 B   3/7/2017
uttx8gqw

uttx8gqw1#

这是将“6个月内”解释为“之后6个月内”。如果这真的意味着6个月前或6个月后,可以调整解决方案。
如果我理解正确的话,你想保留所有的“a”,然后保留所有其他在“a”六个月内的。使用条件运行最大值:

select t.*
from (select t.*,
             max(case when code = 'A' then date end) over (partition by person_id order by date) as prev_a_date
      from t
     ) t
where code = 'A' or prev_a_date > add_months(date, -6)

相关问题