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之后的日期。谢谢。运行完美。