在同一分区中获取上一个日期

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

我有下表,其中的输出包括sql查询的结果,该查询没有提供我希望看到的输出(我在pyspark中执行此操作,因此sql的配置单元版本是):
下面是我正在运行的查询(我尝试了一系列的变化,包括range/row和不同的前/后unbounded等,但没有一个能提供我想要的输出):

select id, date_1, acct_num, date_2, txn_am,
min(date_1) OVER(PARTITION BY acct_num
ORDER BY date_1 ASC RANGE BETWEEN 2 PRECEDING AND CURRENT ROW) as lower_bound_timestamp      
from abc.def
order by acct_num, date_2

这就是我想要输出的样子(在这个查询中,我只是创建一个下界时间戳列)。如果你注意到我想要的关键是下界时间戳不一定是前一行中日期的值,我想要它是日期的前一个值(它是按日期asc排序的),因为如果有5行具有相同的日期,然后有3行具有不同的下一个日期,我希望接下来的3行有一个前一个日期的下界\u时间戳\u 1,但是我的查询我尝试的许多变体都没有实现:

id        date_1     acct_num   date_2      txn_am        lower_bound_timestamp

123       2019-06-26   123      2019-06-10   10           2019-06-26
354       2019-06-26   123      2019-06-15   10           2019-06-26
357       2019-06-28   123      2019-06-15   10           2019-06-26
359       2019-06-30   123      2019-06-17   10           2019-06-28
360       2019-07-05   123      2019-06-18   10           2019-06-30
361       2019-07-05   123      2019-06-20   10           2019-06-30
byqmnocz

byqmnocz1#

你可以用 range() ,但有数字:

select id, date_1, acct_num, date_2, txn_am,
       min(date_1) over (partition by acct_num
                         order by datediff(date_1, '2000-01-01')
                         ranged between unbounded preceding and 1 preceding
                        ) as prev_date
from abc.def
order by acct_num, date_2

相关问题