根据最新时间戳选择行

时间:2018-06-04 16:19:58

标签: sql apache-spark-sql

我有一个关于表格的问题,因为如果有任何帮助那么我是新手。

我有一个包含3列的表格。我使用它的第一列将它作为公共密钥。根据键,我可能会选择多行。我想选择最新时间戳为第2列的行。第3列可以有不同的值。

例如:

Col1          Col2       Col3 
some_name     12:5:12   1
some_name     12:6:12   0
some_name1    12:5:12   1
some_name1    12:6:12   0
some_name2    12:5:12   0
some_name2    12:6:12   1

输出:

Col1          Col2       Col3 
some_name     12:6:12   0
some_name1    12:6:12   0
some_name2    12:6:12   1

我想在apache spark中这样做。

3 个答案:

答案 0 :(得分:1)

在Spark中,我想我会选择row_number()

select t.*
from (select t.*, row_number() over (partition by col1 order by col2 desc) as seqnum
      from t
     ) t
where seqnum = 1;

答案 1 :(得分:0)

此查询可能会帮助您

select
*
from table ta
where ta.col2 = (select MAX(col2) from table  where col1 = ta.col1)

此查询重新调整col1的最新数据

答案 2 :(得分:0)

Using sparks Window functions:

val w = Window.partitionBy("col1").orderBy(col("col2").desc)

df.withColumn("latestTS", row_number().over(w))
  .where(col("latestTS") === 1)
  .drop("latestTS")
  .show(false)

+----------+-------+----+
|col1      |col2   |col3|
+----------+-------+----+
|some_name |12:6:12|0   |
|some_name1|12:6:12|0   |
|some_name2|12:6:12|1   |
+----------+-------+----+