Sql 如何从hive中的记录中获取第二个最后日期?
我有一张这样的桌子:Sql 如何从hive中的记录中获取第二个最后日期?,sql,hive,Sql,Hive,我有一张这样的桌子: member dato 696382 2016-06-21 35546232 2016-02-01 9001107 2013-09-23 40310785 2014-07-18 3802508 2015-06-21 74376545 2016-01-11 14969202 2014-12-08 17495001 2015-09-01
member dato
696382 2016-06-21
35546232 2016-02-01
9001107 2013-09-23
40310785 2014-07-18
3802508 2015-06-21
74376545 2016-01-11
14969202 2014-12-08
17495001 2015-09-01
17238917 2016-11-16
dato是会员购买产品的日期,从2015年1月1日到昨天。我想得到一个包含三列的新表:member、dato、dato_second。dato_second是最接近dato的日期。例如,17238917除了“2016-11-16”之外,历史上还有三个日期:“2016-11-10”、“2015-03-27”,新记录将是17238917、“2016-11-16”、“2016-11-10”。那么如何得到新的桌子呢 Hmmm。我认为条件聚合和
row\u number()
是最简单的解决方案:
select member,
max(case when seqnum = 1 then dato end) as dato,
max(case when seqnum = 2 then dato end) as dato_1
from (select t.*,
row_number() over (partition by member order by dato desc) as seqnum
from t
) t
group by member;
这就是你要找的
select member
,dato
,lag (dato) over (partition by member order by dato) as prev_dato
from mytab
请将您的样本更改为每个成员都有多个记录的样本,并添加请求的结果集。恐怕我想保留所有记录和重复的成员。新结果的行数应与源表的行数相同。在我的原始解决方案(删除)中,我给了您“最接近dato的日期”,它不一定是dato之前的日期,也可能是dato之后的日期。谢谢。运行完美。