我使用SQL API在Spark SQL(v 2.4.0)上工作。我有一个要求,要求根据条件使用sql查询合并记录。
有一个表,其中包含客户购买数据。要求是按顺序排列line_num
的{{1}}并将每个记录与其下一个记录进行比较,并计算这两个记录的order_id
之间的差异,并检查差异是否为<少于purch_dt
天。现在,对所有后续记录保持相同的处理,直到遇到差异超过5天更多的记录-此时,将所有这些记录(到目前为止已读取)合并为一条记录并输出。但是,如果遇到一条记录,记录的差异更大大于5天,则不要合并该记录,而是将该记录视为“新”记录集的开头,然后使用来检查其后续记录相同的逻辑(如上所述),如果按照逻辑有效,则合并为一条记录。
请参见以下示例:
5
预期结果:
order_id | line_num | purch_dt
10001 | 1 | 10-03-2020
10001 | 2 | 13-03-2020
10001 | 3 | 16-03-2020
10001 | 4 | 25-04-2020
10001 | 5 | 26-04-2020
22345 | 1 | 09-01-2020
22345 | 2 | 22-01-2020
对于订单order_id | purch_dt
10001 | 16-03-2020
10001 | 26-04-2020
22345 | 09-01-2020
22345 | 22-01-2020
,前三个记录的日期之间的时间差彼此相差不到5天。因此,它们被视为单个集合,并且全部都合并到输出中的单个记录中。现在,对于第3条记录和第4条记录,它们之间的差异超过5天-因此,将第4条记录视为新记录的开始,然后将其与第5条记录合并到另一个新记录并输出。
对于订单'10001'
,两条记录之间的差异超过5天,因此将分别处理每条记录并输出。
任何人都可以帮助我使用sql查询解决此问题。
谢谢