通过sql在表中进行行比较

nafvub8i  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(283)

我有一张表格,结构如下:

ID        Day             Value1    Value2
10        20200601        ABC       100
10        20200602        ABC       100
10        20200603        CDE       200
10        20200604        CDE       100
20        20200601        ABC       50
20        20206002        ABC       100
20        20200603        ABC       100
20        20200604        ABC       100

有没有一种方法可以构建一个sql查询,每个查询 ID –寻找 Day 在哪儿 Value1 或者 Value2 发生了什么变化?我想要达到的结果是:

ID    Day         Value1      Value2
10    20200603    ABC, CDE    100, 200   
10    20200604    CDE         200, 100
20    20200602    ABC         50, 100

在其中,我可以每天跟踪每个id的更改。
编辑:我正在通过pysparksql访问hadoop集群上的数据

wz1wpwve

wz1wpwve1#

iiuc您可以在id上创建一个窗口并按天排序,以获得所需的输出

window = Window.partitionBy('ID').orderBy('Day').rowsBetween(Window.currentRow-1,Window.currentRow)

df = df.select('ID','Day',f.collect_set('Value1').over(window).alias('value1'),f.collect_set('Value2').over(window).alias('value2')).filter((f.size('value1')>1) | (f.size('value2')>1))

df.show()

+---+--------+----------+----------+
| ID|     Day|    value1|    value2|
+---+--------+----------+----------+
| 20|20200602|     [ABC]| [100, 50]|
| 10|20200603|[CDE, ABC]|[100, 200]|
| 10|20200604|     [CDE]|[100, 200]|
+---+--------+----------+----------+

相关问题