MySQL生产环境_使用SQL中的ROW_NUMBER()函数查找每个ID的最新记录
2023-12-13 07:02:17
生产需求
应生产环境要求,需要获取到每个id的最新位置及其他GL属性
ROW_NUMBER函数
????????ROW_NUMBER()函数是一种窗口函数,可以根据指定的列对结果集中的行进行编号。通过结合PARTITION BY子句和ORDER BY子句,ROW_NUMBER()函数能够对数据进行分组排序,并为每个分组中的行分配一个唯一的数字序号。
SQL代码:
select *
from
(select *,row_number() over (partition by `id` order by `time` desc ) as rank
from `table1`)?
where rank = 1
-- by_https://blog.csdn.net/qq_52128187?spm=1010.2135.3001.5343
代码逻辑:
????????首先使用ROW_NUMBER()函数对表中的数据按照ID进行分区(partition by id
),然后按时间降序排序(order by time
desc)。这样就创建了一个排名(rank),每个ID组内的第一行将获得排名1,第二行将获得排名2,依此类推。接着,外层查询选择了排名为1的行,即每个ID的最新记录
PySpark代码
# 导入所需的库
from pyspark.sql import SparkSession
from pyspark.sql.window import Window
import pyspark.sql.functions as F
spark = SparkSession.builder.appName("latest_records").getOrCreate()
data = [
(1, "Record 1", "2022-01-01 12:00:00"),
(2, "Record 2", "2022-01-02 10:00:00"),
(1, "Record 3", "2022-01-03 08:00:00"),
(3, "Record 4", "2022-01-04 14:00:00"),
(2, "Record 5", "2022-01-05 16:00:00")
]
columns = ["id", "description", "time"]
df = spark.createDataFrame(data, columns)
df = df.withColumn("time", F.to_timestamp("time"))
# 定义窗口规范
windowSpec = Window.partitionBy("id").orderBy(F.col("time").desc())
# 使用ROW_NUMBER()函数查找每个ID的最新记录
ranked_df = df.withColumn("rank", F.row_number().over(windowSpec)).filter(F.col("rank") == 1).drop("rank")
ranked_df.show()
文章来源:https://blog.csdn.net/qq_52128187/article/details/134893065
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!