通过获取同一分区中的上一个日期进行分区

问题描述 投票:0回答:1

我有下表,其输出包括我的sql查询的结果,该结果没有给我我想看到的输出(我在pyspark中这样做,所以是hive版本的sql):

这里是我正在运行的查询(我已经尝试了很多这样的变化,包括范围/行和不同的前/后无界等,这些似乎都没有给我想要的输出):

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

这是我希望输出看起来的样子(在此查询中,我只是创建lower_bound_timestamp列)。如果您注意到我想要的关键是lower_bound_timestamp不一定是前一行中date_1的值,我希望它是date_1的先前值(按日期升序排序),因为如果存在说5行相同的日期,然后3行具有不同的下一个日期,我想这3个下一行的下一个date_boundstamp仅为上一个date_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
sql hive apache-spark-sql hiveql
1个回答
0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.